有没有办法在 JavaScript 中返回两个数组之间的差异?
例如:
var a1 = ['a', 'b'];
var a2 = ['a', 'b', 'c', 'd'];
// need ["c", "d"]
原文由 John Adawan 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法在 JavaScript 中返回两个数组之间的差异?
例如:
var a1 = ['a', 'b'];
var a2 = ['a', 'b', 'c', 'd'];
// need ["c", "d"]
原文由 John Adawan 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 ES7 有更好的方法:
路口
let intersection = arr1.filter(x => arr2.includes(x));
对于 [1,2,3] [2,3]
它将产生 [2,3]
。另一方面,对于 [1,2,3] [2,3,5]
将返回相同的内容。
区别
let difference = arr1.filter(x => !arr2.includes(x));
对于 [1,2,3] [2,3]
它将产生 [1]
。另一方面,对于 [1,2,3] [2,3,5]
将返回相同的内容。
对于 对称差异,您可以执行以下操作:
let difference = arr1
.filter(x => !arr2.includes(x))
.concat(arr2.filter(x => !arr1.includes(x)));
这样,您将获得一个数组,其中包含 arr1 中不在 arr2 中的所有元素,反之亦然
正如@Joshaven Potter 在他的回答中指出的那样,您可以将其添加到 Array.prototype 中,以便像这样使用它:
Array.prototype.diff = function(arr2) { return this.filter(x => !arr2.includes(x)); }
[1, 2, 3].diff([2, 3])
原文由 Luis Sieira 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
这个答案是在 2009 年写的,所以有点过时了,对于理解这个问题也很有教育意义。我今天使用的最佳解决方案是
(此处归功于其他作者)
我假设您正在比较一个普通数组。如果没有,则需要将 for 循环更改为 for .. in 循环。