我有两个以逗号分隔的列表,第一个是可能值列表,第二个是“选定”值列表。我需要创建第一个列表中第二个列表中不存在的所有项目的列表。
我可以将第一个列表拆分成一个数组并使用“for”通过string_pos查看列表是否包含第二个列表项,但是我想知道是否还有更多有效的方法来实现这一目标。
谢谢!
答案 0 :(得分:1)
您要做的第一件事就是将两个以逗号分隔的列表拆分为字符串数组。假设它们的格式相当合理,您可以使用
执行此操作possible_values = possible_string.split(/,\s?/) //split on commas with a possible space
selected_values = selected_string.split(/,\s?/)
如果您愿意使用外部库,underscore.js具有完美的功能。您描述的操作是设置差异运算符,它是下划线中的difference function。
您想要的结果是调用
的返回值_.difference(possible_values, selected_values)
答案 1 :(得分:1)
如果您正在寻找最佳方式,这就是您必须做的事情
在班轮时间内将要检查的列表转换为对象。因为,对象在技术上是哈希表,它提供更快的查找O(1))。
然后,迭代第一个列表并检查对象中是否存在当前元素。如果不存在,请将其添加到结果中。
var list1 = [1, 2, 3], list2 = [1, 2], dict2 = {};
list2.forEach(function(item) {
dict2[item] = true;
});
var result = list1.reduce(function(prev, current) {
if (dict2.hasOwnProperty(current) === false) {
prev.push(current);
}
return prev;
}, [])
console.log(result);
<强>输出强>
[ 3 ]
答案 2 :(得分:1)
您可以过滤可能的列表。
如果列表是字符串,则拆分或匹配它们以获取数组。
var possible=[1,2,3,4],
selected=[2,4];
var unchosen=possible.filter(function(itm){
return selected.indexOf(itm)==-1;
});
unchosen
/* returned value: (Array)
1,3
*/