首页 > 解决方案 > 如何测试一个数组是否包含多个元素?

问题描述

比较两个数组并返回一个新数组,其中包含仅在两个给定数组之一中找到的任何项目,但不能同时在两个给定数组中找到。换句话说,返回两个数组的对称差。

注意
您可以按任何顺序返回数组及其元素。

我试图通过遍历数组的每个元素来解决这个问题,并说如果数组中有多个这些元素,那么我们不希望它被返回。

注意:我比这个问题更进一步,基本上是在尝试解决:“返回在任一数组中只出现一次的任何元素。” 如何拒绝多次出现的任何元素?

我的代码不起作用:

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]);

标签: javascriptarraysalgorithm

解决方案


给定数据:

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()函数对其进行排序。

我希望上述解决方案为您提供了一些想法和解释。


推荐阅读