Javascript 使用lodash在删除非唯一值时返回唯一值数组
我正在尝试按调查id返回访问者未投票的调查。使用下面的示例数组,我希望返回调查id:4 实现这一目标的最佳方式是什么 以下是我的示例阵列:Javascript 使用lodash在删除非唯一值时返回唯一值数组,javascript,arrays,lodash,Javascript,Arrays,Lodash,我正在尝试按调查id返回访问者未投票的调查。使用下面的示例数组,我希望返回调查id:4 实现这一目标的最佳方式是什么 以下是我的示例阵列: //测量对象 [{ 调查编号:1, 名称:“调查1”, 问题:“这是一个调查问题” }, { 调查编号:2, 名称:“调查2”, 问题:“这是另一个调查问题” }, { 调查编号:3, 名称:“调查3”, 问题:“这是另外3个调查问题” }, { 调查编号:4, 名称:“调查4”, 问题:“这是另外4个调查问题” }] //投票 [{ 投票:11, 访客令
//测量对象
[{
调查编号: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),在做了一些研究以了解它之后,我发现你是正确的。我把你的答案换成了公认的答案。