【问题标题】:How to test if an array includes more than one elements?如何测试一个数组是否包含多个元素?
【发布时间】:2020-05-12 13:19:28
【问题描述】:

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

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

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

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

我的代码不起作用:

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

【问题讨论】:

标签: javascript arrays algorithm


【解决方案1】:

简单的方法是这样的

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 来查看数组中是否存在元素,并根据该元素进行过滤

【讨论】:

    【解决方案2】:

    如果你想找到独特的元素,你可以使用这个

    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]
    

    我认为这会有所帮助。

    【讨论】:

    • 有点像我 3 分钟前发布的答案
    【解决方案3】:

    你可以看看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 合并它们,返回你的对称差异

    【讨论】:

      【解决方案4】:
      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]))
      

      【讨论】:

        【解决方案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()函数对其进行排序。

        希望以上解决方案能给你一些思路和解释。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-27
          • 2022-01-09
          • 2018-03-22
          • 1970-01-01
          • 2021-06-04
          • 2019-09-03
          相关资源
          最近更新 更多