Array.prototype.includes()(ES2016/ES7) 在这里派上用场。
路口
let intersection = arr1.filter(x => arr2.includes(x));
产生同时存在于两者中的值arr1
and arr2
.
-
[1,2,3]
and [2,3]
将产生[2,3]
-
[1,2,3]
and [2,3,5]
will also yield [2,3]
不同之处
(仅 A 中的值。)
let difference = arr1.filter(x => !arr2.includes(x));
产生的值仅存在于arr1
.
-
[1,2,3]
and [2,3]
将产生[1]
-
[1,2,3]
and [2,3,5]
will also yield [1]
对称差
let symDifference = arr1.filter(x => !arr2.includes(x))
.concat(arr2.filter(x => !arr1.includes(x)));
产生的值为only in arr1
or arr2
, 但不是两者都(“异或”)。
如果您将两个数组彼此相减,然后将两个结果组合起来,就会得到以下结果(您会得到一个包含以下所有元素的数组)arr1
那些不在arr2
反之亦然)。
-
[1,2,3]
and [2,3]
将产生[1]
-
[1,2,3]
and [2,3,5]
将产生[1,5]
As @Joshaven Potter 指出了他的回答,您可以直接将其分配给Array.prototype
所以它可以直接在数组上使用,如下所示:
Array.prototype.diff = function(arr2) {
return this.filter(x => !arr2.includes(x));
}
[1, 2, 3].diff([2, 3]) // [1]