我想比较多个数组,最后得到一个包含来自不同数组的所有唯一值的数组。我试着:
1,使用filter方法比较2个数组之间的差异
2,调用for循环将数组输入过滤器方法
,代码如下
function diffArray(arr1, arr2) {
function filterfunction (arr1, arr2) {
return arr1.filter(function(item) {
return arr2.indexOf(item) === -1;
});
}
return filterfunction (arr1,arr2).concat(filterfunction(arr2,arr1));
}
function extractArray() {
var args = Array.prototype.slice.call(arguments);
for (var i =0; i < args.length; i++) {
diffArray(args[i],args[i+1]);
}
}
extractArray([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);
然而它不起作用并返回错误消息&#34;无法读取属性&#39; indexOf&#39; of undefined&#34; ....逻辑有什么问题,我应该改变什么来使其有效?
非常感谢您的帮助!
Re:对于所有标记为重复的问题...我正在寻找的是一个解决方案,可以让我输入尽可能多的数组,以便输入并减少所有差异(例如输入10000数组和为唯一值返回1个数组),但不仅仅是比较2个数组..我看过的解决方案总是只有2个数组。
答案 0 :(得分:0)
我不使用过滤器或任何类型的东西,但它会完成工作。我首先创建一个空数组,并concat
下一个数组。然后我传递它来删除重复项并返回新的“过滤”数组以供使用。
function deleteDuplicates(a){
for(var i = a.length - 1; i >= 0; i--){
if(a.indexOf(a[i]) !== i){
a.splice(i, 1);
}
}
return a;
}
function extractArray() {
var args = Array.prototype.slice.call(arguments), arr = [];
for (var i = 0; i < args.length; i++) {
arr = deleteDuplicates(arr.concat(args[i]));
}
return arr;
}
var arr = extractArray([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);
console.log(arr) //[3, 2, 5, 1, 7, 4, 6]