数组的过滤器交叉点(Javascript)

数组的过滤器交叉点(Javascript),javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我正在尝试编写一个函数,用于查找两个嵌套数组都不通用的数组。还要注意,数组将被预先排序 var array1 = [ [1, 2, 3], [2, 3, 4] [5, 6, 7] ]; var array2 = [ [1, 2, 3], [2, 3, 4] [7, 8, 9] ]; 对于上述两个数组,函数应该返回[5,6,7]和[7,8,9] 到目前为止,我已经: function arrayIntersection(array1, array2) {

我正在尝试编写一个函数,用于查找两个嵌套数组都不通用的数组。还要注意,数组将被预先排序

var array1 = [ [1, 2, 3], [2, 3, 4] [5, 6, 7] ];
var array2 = [ [1, 2, 3], [2, 3, 4] [7, 8, 9] ];
对于上述两个数组,函数应该返回[5,6,7]和[7,8,9]

到目前为止,我已经:

        function arrayIntersection(array1, array2) {
            return array2.filter(function(values1) {
                return array2.indexOf(values1) === -1;
            });
        };

但它似乎不起作用。我猜indexOf()没有正确地进行比较。我试图避免使用ES6或polyfills。

首先,您在筛选器中引用了错误的数组。要修复比较,可以将数组转换为json。您还需要对第二个数组运行筛选器并加入答案:

vararray1=[[1,2,3],[2,3,4],[5,6,7];
var array2=[[1,2,3],[2,3,4],[7,8,9];
函数数组接口(输入1、输入2){
var input2NotInInput1=input2.filter(函数(值1){
return input1.map(函数(val){return JSON.stringify(val);}).indexOf(JSON.stringify(values1))=-1;
});
变量input1NotInInput2=input1.filter(函数(值1){
return input2.map(函数(val){return JSON.stringify(val);}).indexOf(JSON.stringify(values1))=-1;
});
返回Input1 NotInInput2.concat(Input2 NotInInput1);
};

console.log(数组接口(array1,array2))首先,您在筛选器中引用了错误的数组。要修复比较,可以将数组转换为json。您还需要对第二个数组运行筛选器并加入答案:

vararray1=[[1,2,3],[2,3,4],[5,6,7];
var array2=[[1,2,3],[2,3,4],[7,8,9];
函数数组接口(输入1、输入2){
var input2NotInInput1=input2.filter(函数(值1){
return input1.map(函数(val){return JSON.stringify(val);}).indexOf(JSON.stringify(values1))=-1;
});
变量input1NotInInput2=input1.filter(函数(值1){
return input2.map(函数(val){return JSON.stringify(val);}).indexOf(JSON.stringify(values1))=-1;
});
返回Input1 NotInInput2.concat(Input2 NotInInput1);
};

console.log(数组接口(array1,array2))
您可以使用内置的
.every()
.filter()
数组方法来完成此任务

vararray1=[[1,2,3],[2,3,4],[5,6,7];
var array2=[[1,2,3],[2,3,4],[7,8,9];
功能比较阵列(arr1、arr2){
如果(arr1.length!==arr2.length){
返回false;
}否则{
返回arr1.every(函数(elem){
返回arr2.indexOf(elem)>-1;
});
}
}
功能过滤器(arr1、arr2){
返回arr1.过滤器(功能(elem){
返回arr2.every(函数(_elem){
返回!比较数组(_elem,elem);
});
});
}
函数过滤器接口(arr1、arr2){
var uniqueToArr1=过滤器(arr1,arr2);
var uniqueToArr2=过滤器(arr2,arr1);
返回[]concat(uniqueToArr1,uniquetoar2);
}

console.log(过滤器接口(array1,array2))
您可以使用内置的
.every()
.filter()
数组方法来完成此任务

vararray1=[[1,2,3],[2,3,4],[5,6,7];
var array2=[[1,2,3],[2,3,4],[7,8,9];
功能比较阵列(arr1、arr2){
如果(arr1.length!==arr2.length){
返回false;
}否则{
返回arr1.every(函数(elem){
返回arr2.indexOf(elem)>-1;
});
}
}
功能过滤器(arr1、arr2){
返回arr1.过滤器(功能(elem){
返回arr2.every(函数(_elem){
返回!比较数组(_elem,elem);
});
});
}
函数过滤器接口(arr1、arr2){
var uniqueToArr1=过滤器(arr1,arr2);
var uniqueToArr2=过滤器(arr2,arr1);
返回[]concat(uniqueToArr1,uniquetoar2);
}

console.log(过滤器接口(array1,array2))这不是一个最好的选择,但它很有效

var ar1=[
[1, 2, 3],
[2, 3, 4],
[5, 6, 7]
];
变量ar2=[
[1, 2, 3],
[2, 3, 4],
[7, 8, 9]
];
函数数组接口(数组1,数组2){
返回数组2.过滤器(函数(值1){
return!array1.some(v=>JSON.stringify(v)==JSON.stringify(values1));
});
};
var结果=阵列间隔(ar1,ar2);

控制台日志(结果)这不是一个最好的选择,但它很有效

var ar1=[
[1, 2, 3],
[2, 3, 4],
[5, 6, 7]
];
变量ar2=[
[1, 2, 3],
[2, 3, 4],
[7, 8, 9]
];
函数数组接口(数组1,数组2){
返回数组2.过滤器(函数(值1){
return!array1.some(v=>JSON.stringify(v)==JSON.stringify(values1));
});
};
var结果=阵列间隔(ar1,ar2);

控制台日志(结果)为什么它不返回
[5,6,7]
?另外,订单重要吗?
[5,6,7]
是否与
[7,6,5]
相同?与@mhodges达成一致,订单是否重要?还是总是对值进行排序?抱歉,忘了提及数组在函数中使用之前总是进行排序。
indexOf
使用严格的相等比较来匹配搜索项。因此,
Array
的不同实例比较起来是不同的,因为它们是不同的对象,即使它们各自的内容元素相同。例如,
[1,2,3]=[1,2,3]
为false。为什么它不返回
[5,6,7]
?另外,订单是否重要?
[5,6,7]
是否与
[7,6,5]
相同?与@mhodges达成一致,订单是否重要?还是总是对值进行排序?抱歉,忘了提及数组在函数中使用之前总是进行排序。
indexOf
使用严格的相等比较来匹配搜索项。因此,
Array
的不同实例比较起来是不同的,因为它们是不同的对象,即使它们各自的内容元素相同。例如,
[1,2,3]==[1,2,3]
为假。工作正常。非常感谢。工作得很好。非常感谢。