我有两个列表如下
list1 = ['选项1''选项2''选项3''选项4''选项5','选项6''选项7'];
list2 = [' option3',' option4',' option7'];
我希望列表
listFinal = [' option1',' option2',' option5',' option6',' option7' ];
请使用角度js给我建议如何使用过滤器解决此问题
尝试使用此代码使用过滤器解决此问题,但无法成功。
app.filter('unique', function() {
return function(collection, keyname) {
var output = [],
keys = [];
angular.forEach(collection, function(item) {
var key = item[keyname];
if(keys.indexOf(key) === -1) {
keys.push(key);
output.push(item);
}
});
return output;
};
});
答案 0 :(得分:1)
我不确定你真的想要一个过滤器。这是你应该在Angular之外解决的问题。如果您愿意将lodash添加到项目中,您可以这样做:
var diff = _.difference(array1, array2);
如果你必须使用过滤器,你可以试试这样的东西吗?
app.filter('difference', function() {
return function(input, diff_array) {
var result = [];
for (var i = 0; i < input.length; i++) {
if (diff_array.indexOf(input[i]) == -1) {
result.push(input[i]);
}
}
return result;
}
}
请注意,如果您这样做,您的模板必须类似于:
{{ input | difference:diff_arr }}
我实际上没有测试任何这个,但这应该是一般的想法。我同意Phillip的说法,这不是你应该在Angular中尝试解决的问题。
答案 1 :(得分:0)
您所描述的是“数组/集合差异”。 StackOverflow上有很多问题已经问过这个问题了。这与Angular.js无关,但是算法解决方案存在问题。只是为了添加一些有趣的材料,一个“天真”的解决方案在O(nlogn)
中运行,它将是:
What is the fastest or most elegant way to compute a set difference using Javascript arrays?