比较两个数组,并返回一个新的数组,其中包含任何只在其中一个数组中找到的元素,但不是两个数组。换句话说,返回两个数组的对称差。
注意事项 你可以以任何顺序返回数组中的元素。
我试图通过循环处理数组中的每个元素来解决这个问题,并说如果数组中有多个这样的元素,那么我们就不希望它被返回。
NB:我比问题更进一步,本质上是想解决。"返回任何一个数组中只出现一次的元素" 如何拒绝任何出现一次以上的元素?
我的代码,没有用。
function diffArray(arr1, arr2) {
var newArr = [...arr1, ...arr2];
let a = newArr.forEach();
function getOccurrence(newArr, a) {
return newArr.filter((v) => (v === value)).length;
}
}
diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
简单的方法是这样的
let array1 = [1,2,3,4,5,6,7]
let array2 = [51,2,3,5,7]
let in1ButNot2 = array1.filter(x=>array2.indexOf(x) === -1)
let difference = array2.filter(y=>in1ButNot2.indexOf(y) === -1)
console.log(difference)
重点是你使用.indexOf来查看数组中是否有元素存在,并基于此进行过滤。
如果你想找到独特的元素,你可以使用这个
const arr1 = [1, 2, 3, 5];
const arr2 = [1, 2, 3, 4, 5];
let unique1 = arr1.filter((o) => arr2.indexOf(o) === -1);
let unique2 = arr2.filter((o) => arr1.indexOf(o) === -1);
const unique = unique1.concat(unique2);
console.log(unique);
// >> [4]
我想会有帮助的。
你可以看看 这把琴
我将在这里解释。
const arrayDifference = (arr1, arr2) => {
return arr1.filter(x => !arr2.includes(x))
.concat(arr2.filter(x => !arr1.includes(x)));
};
这一部分返回的项目在 arr1
不包括在 arr2
arr1.filter(x => !arr2.includes(x))
而另一部分
arr2.filter(x => !arr1.includes(x))
退货 arr2
不在 arr1
那么 .concat
合并它们,返回你的对称差值。
const diffArray = (arr1, arr2) => {
return arr1.filter((item, index) => arr2.indexOf(item) > 0)
}
console.log(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]))
给定数据。
const arr1 = [10, 20, 30, 40]
const arr2 = [10, 20, 50, 60]
预期结果:
Result: [30, 40, 50, 60];
解决方案是:
function diffArray(arr1, arr2){
// combine elements from both arrays
const allElements = [...arr1, ...arr2]
// filter elements not available in arr1
const filteredArr1 = allElements.filter(element => !arr1.includes(element));
// filter elements not available in arr2
const filteredArr2 = allElements.filter(element => !arr2.includes(element));
// return filtered elements from both arr1 and arr2
return [...filteredArr1, ...filteredArr2];
}
// testing the code
const result = diffArray([10, 20, 30, 40], [10, 20, 50, 60])
console.log(result);
注: 结果将是未排序的,你可以使用 sort()
函数进行排序。
希望以上的解决方法能给你提供一些思路和解释。