我有两个数组和一个发现差异的方法。
但目前,该方法显示了两种阵列之间的差异。
如何实现第一个数组与第二个数组的比较,以便只返回第一个数组的差异。
let test1 = ['1', '2', '3', '4/2', '5/4', '6-2'];
let test2 = ['1', '2', '3', '5/4', '4/2', '6-1', '7/2', '8-2'];
const diff = function (arr1, arr2) {
return arr1.filter(i => !arr2.includes(i)).concat(arr2.filter(i => !arr1.includes(i)))
}
console.log(diff(test1, test2));
预期返回值: 6-2
发布于 2020-10-28 16:15:41
将第二个数组的所有数目放入一个Set
中,然后在第一个数组上使用.filter()
方法过滤Set
中不存在的第一个数组中的元素。
let test1 = ['1', '2', '3', '4/2', '5/4', '6-2'];
let test2 = ['1', '2', '3', '5/4', '4/2', '6-1', '7/2', '8-2'];
const diff = function(arr1, arr2) {
const set = new Set(arr2);
return arr1.filter(n => !set.has(n));
}
console.log(diff(test1, test2));
注意:,您也可以在filter()
方法中使用!arr2.includes(n)
条件,但是对于arr1
中的每个数字,我们将遍历arr2
中的每个元素,这并不理想。使用Set
,我们不必检查arr2
中的每个元素。
发布于 2020-10-28 16:15:09
您需要在第一个数组上筛选第二个数组中没有的所有元素,因此:
const test1 = ['1', '2', '3', '4/2', '5/4', '6-2'];
const test2 = ['1', '2', '3', '5/4', '4/2', '6-1', '7/2', '8-2'];
const differences = test1.filter(o => !test2.includes(o));
console.log(differences);
https://stackoverflow.com/questions/64576892
复制相似问题