比较两个数组,并返回一个新的数组,其中包含仅在两个给定数组之一中找到的所有项,但不是两个都返回。换句话说,返回两个数组的对称差。
注意
您可以以任何顺序返回数组及其元素。
我试图通过遍历数组的每个元素并说如果数组中的这些元素中有多个元素来解决此问题,那么我们不希望返回它。
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]);
答案 0 :(得分:0)
简单的方法就是这样
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查看数组中是否存在元素,并根据该元素进行过滤
答案 1 :(得分:0)
如果您要查找唯一元素,则可以使用
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]
我认为这会有所帮助。
答案 2 :(得分:0)
您可以看看this fiddle
我将在这里解释
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
合并它们,返回对称差
答案 3 :(得分:0)
['2020-05-04','2020-05-05','2020-05-06'....]
答案 4 :(得分:0)
提供数据:
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()
函数对其进行排序。
我希望以上解决方案能够为您提供一些想法和解释。