我有一个关于找出两个数组之间差异的快速问题。我找到了一大块 JavaScript 代码来做我想做的事 here并对其进行了一些修改:
JS
function diffArray(arr1, arr2) {
var newArr = [];
var myArr = arr1.concat(arr2);
newArr = myArr.filter(function(item){
return arr2.indexOf(item) < 0 || arr1.indexOf(item) < 0;
});
return newArr;
}
diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
但是,我不确定我是否真的理解这里的过滤器功能是做什么的。谁能给我一个清晰的解释,说明这是如何工作的。
注意:我已经了解过滤器函数的基础知识。我正在寻找此过滤器的具体解释。
最佳答案
newArr = myArr.filter(function(item){
return arr2.indexOf(item) < 0 || arr1.indexOf(item) < 0;
});
Array#filter
函数迭代 concat
函数新建数组的每个元素(包含 arr1
和 arr2
数组的每个元素)。
如果在某些迭代中至少满足 arr2.indexOf(item) < 0
或 arr1.indexOf(item) < 0
条件之一(返回 true
),则 Array#filter
函数过滤掉(返回)指定的(实际迭代的)元素。
如果迭代元素同时在 arr1
和 arr2
中,则 indexOf
函数将返回它的索引(高于 0
)——条件将返回 false
(它不小于 0
)。然后我们将收到 false || false
,即 false
,该元素不会包含在 newArr
数组中,包含唯一元素。
如果给定元素仅在一个数组中(它不存在于第二个数组中 - 它的索引将返回 -1
- 它将满足 < 0
条件) - 其中一个条件将返回 true
,因此两者条件将变为 true || false
,即 true
- 给定元素将包含在 newArr
数组中。
关于javascript - 两个数组的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43505025/