[英]How to compare multiple arrays and return an array with unique values in javascript?
我想比较多个数组,最后得到一个包含来自不同数组的所有唯一值的数组。 我试过了:
1,使用filter方法比较两个数组之间的差异
2,调用for循环将数组输入到filter方法中
和代码如下
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]);
但是,它不起作用,并返回错误消息“无法读取欠定义的属性'indexOf'” ....逻辑有什么问题,我应该更改使其起作用吗?
非常感谢您的提前帮助!
回复:对于所有将此问题标记为重复的问题……我正在寻找一种解决方案,可以让我根据需要输入尽可能多的数组,并减少所有差异(例如,输入10000个数组并返回1个数组) (用于唯一值),而不仅是比较2个数组..我看到的解决方案始终仅使用2个数组。
我不使用过滤器或任何种类的过滤器,但它将完成工作。 我首先创建一个空的数组和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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.