Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用lodash在删除非唯一值时返回唯一值数组_Javascript_Arrays_Lodash - Fatal编程技术网

Javascript 使用lodash在删除非唯一值时返回唯一值数组

Javascript 使用lodash在删除非唯一值时返回唯一值数组,javascript,arrays,lodash,Javascript,Arrays,Lodash,我正在尝试按调查id返回访问者未投票的调查。使用下面的示例数组,我希望返回调查id:4 实现这一目标的最佳方式是什么 以下是我的示例阵列: //测量对象 [{ 调查编号:1, 名称:“调查1”, 问题:“这是一个调查问题” }, { 调查编号:2, 名称:“调查2”, 问题:“这是另一个调查问题” }, { 调查编号:3, 名称:“调查3”, 问题:“这是另外3个调查问题” }, { 调查编号:4, 名称:“调查4”, 问题:“这是另外4个调查问题” }] //投票 [{ 投票:11, 访客令

我正在尝试按调查id返回访问者未投票的调查。使用下面的示例数组,我希望返回调查id:4

实现这一目标的最佳方式是什么

以下是我的示例阵列:

//测量对象
[{
调查编号:1,
名称:“调查1”,
问题:“这是一个调查问题”
}, {
调查编号:2,
名称:“调查2”,
问题:“这是另一个调查问题”
}, {
调查编号:3,
名称:“调查3”,
问题:“这是另外3个调查问题”
}, {
调查编号:4,
名称:“调查4”,
问题:“这是另外4个调查问题”
}]
//投票
[{
投票:11,
访客令牌:“aDe4GggAe3”,
调查编号:1
}, {
投票:12,
访客令牌:“aDe4GggAe3”,
调查编号:2
}, {
投票:13,
访客令牌:“aDe4GggAe3”,
调查编号:3
}]
接受的答案具有O(n^2)时间复杂性。如果性能很重要,那么应该避免相互嵌套的线性操作——如果支持代码的简洁性,@S.D.的答案更简洁。这是一个具有普通JavaScript和线性时间O(n)复杂性的版本

function surveysWithNoVotes(surveyList, voteList) {
  var surveyIds = surveyList.map(function(survey) {
    return survey.survey_id
  })
  var votedForIdsMap = voteList.reduce(function(memo, vote) {
    memo[vote.survey_id] = vote.survey_id
  }, {})
  return surveyIds.filter(function(id) {
    return !votedForIdsMap[id]
  })
}

您可以结合使用
\uu.filter
\uu.find
对您的调查集合应用过滤功能,当在投票集合中找到匹配的
调查id
时,过滤掉调查。请参见此示例
getUnansweredSurveys
函数:

function getUnansweredSurveys(surveys, votes) { 
  return _.filter(surveys, function(survey) { 
    return !_.find(votes, {survey_id: survey.survey_id})
  }) 
}

用法:
.differenceBy(调查、投票、'survey\u id')
我是编程新手,不熟悉O(n^2),在做了一些研究以了解它之后,我发现你是正确的。我把你的答案换成了公认的答案。