javascript - 对于两个数组,查找仅存在于一个数组中的项目(对称差异)
问题描述
我需要比较两个数组并返回一个新数组,其中包含仅在两个给定数组之一中找到的任何项目,但不能同时在两者中找到。换句话说,返回两个数组的对称差。我的算法包括在第一个数组上使用 map() 方法,并使用every() 将该数组的每个元素与第二个数组的元素进行比较。如果此方法返回 true,则元素将在 map 的块级别返回(最终会将其添加到返回的数组中),否则将被丢弃。我不确定为什么我的代码不起作用。这是使用我的代码的错误输出示例:
function diffArray(arr1, arr2) {
var newArr = arr1
.map(elem1 => {
if (arr2.every(elem2 => elem2 != elem1)) {
return elem1;
}
});
return newArr;
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));
这是错误的输出:[未定义,未定义,未定义,未定义]
预期输出为:[4]
解决方案
您的方法迭代第一个数组,并且由于使用map
与检查值一起使用,您得到 undefined 的每个元素arr1
。
如果你也拿filter
另一个数组,你可以获得想要的结果。
function diffArray(arr1, arr2) {
return [
...arr1.filter(elem1 => arr2.every(elem2 => elem2 != elem1)),
...arr2.filter(elem1 => arr1.every(elem2 => elem2 != elem1))
];
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));
另一种方法采用两个数组的所有值组成的数组,并通过检查该值是否不包含在两个数组中来进行过滤。
function diffArray(arr1, arr2) {
return [...arr1, ...arr2].filter(v => arr1.includes(v) !== arr2.includes(v));
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]));
推荐阅读
- javascript - 如何使用js或jquery继承html中的高度
- postgresql - Hasura Graphql-如何将一个查询的输出作为输入传递给另一个查询?
- flutter - Flutter:为什么提供的数据在 Drawer 小部件中不可用
- javascript - 无法让任何 Javascript 文件在 blazor 中正常工作
- javascript - 如何从 Firebase 云函数调用异步函数
- powershell - 将标头添加到 100MB 文件大约需要 10 分钟
- java - 基于给定键动态排序 JSON 字符串
- node.js - 由于 Kurento-Client 依赖,Docker 镜像构建失败
- xml - XSD - 如何在 XML 中允许任意顺序的元素任意次数?
- google-sheets - 谷歌表格将 if 语句转换为数组公式