如何测试一个数组是否包含一个以上的元素?

问题描述 投票:0回答:3

比较两个数组,并返回一个新的数组,其中包含任何只在其中一个数组中找到的元素,但不是两个数组。换句话说,返回两个数组的对称差。

注意事项 你可以以任何顺序返回数组中的元素。

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

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]);
javascript arrays algorithm
3个回答
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来查看数组中是否有元素存在,并基于此进行过滤。


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]

我想会有帮助的。


0
投票

你可以看看 这把琴

我将在这里解释。

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 合并它们,返回你的对称差值。


0
投票
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]))

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

希望以上的解决方法能给你提供一些思路和解释。

© www.soinside.com 2019 - 2024. All rights reserved.