我在 Javascript 中有两个数组,目前看起来像这样,但通过 HTTP 请求(节点)更新:
var x = [[292,"2349","902103","9"],[3289,"93829","092","920238"]]
var y = [[292,"2349","902103","9"],[322,"93829","092","920238"],[924,"9320","8932","4329"]]
我正在寻找比较这些数组的方法,这样,如果 y 中有一个不在 x 中的数组,它将被保存到一个新数组 - z
。请注意,有时数组内部的数组顺序会发生变化,但我不希望这影响结果。
但是,如果 x 中有一个不在 y 中的数组,则不应将其保存到 z
。
我读了JavaScript array difference并且已经能够复制它,但是如果 x
数组没有显示在 y
中,它将被打印到 z
。我想知道是否可以不存储它,只存储 y
中的不同项目?
最佳答案
使用接受数组(随着 y
的每次迭代而改变)并返回对 some
中的每个元素(嵌套数组)进行操作的新函数的高阶函数.它返回 true
如果数组包含相同的元素而不考虑顺序。
function matches(outer) {
return function (el) {
if (outer.length !== el.length) return false;
return el.every(function (x) {
return outer.indexOf(x) > -1;
});
}
}
遍历 y
并返回不在 x
中的数组列表.
function finder(x, y) {
return y.filter(function (el) {
return !x.some(matches(el));
});
}
finder(x, y);
关于javascript - 在 Javascript 中比较两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36520223/