比较两个数组并创建一个具有差异的新数组,考虑重复

时间:2018-05-16 22:00:25

标签: javascript arrays lodash

假设我有两个包含数字的数组..

[1,1,7,6], [1,7]

我需要用第二个数组中没有出现的数字创建一个新数组,但也要考虑有两个1。

我尝试过使用lodash的_.difference([1,1,7,6],[1,7])

以及其他一些简单的Javascript函数,但它们没有考虑到有两个1,所以我最终得到了[6]

我希望的结果是[1,6]

订单无关紧要

3 个答案:

答案 0 :(得分:2)

迭代第一个数组。对于第一个数组中的每个元素,搜索第二个数组。如果存在,请将null插入该索引。如果它不存在,则将其推送到具有差异的新阵列



const difference = (arr1, arr2) => {
    const differenceArr = []
    for (let i = 0; i < arr1.length; i++) {
        const matchingIdx = arr2.indexOf(arr1[i]);
        if (matchingIdx !== -1) {
            arr2[matchingIdx] = null
        } else {
            differenceArr.push(arr1[i])
        }
    }
    return differenceArr
}

console.log(difference([1, 1, 7, 7, 6],[1, 1, 7]))
&#13;
&#13;
&#13;

答案 1 :(得分:2)

较短的脚本:

<AllowedMethod>HEAD</AllowedMethod>

或者只是做一会儿,而不是在函数内部调用它。

答案 2 :(得分:1)

您可以采取以下措施:

const diff = (array1, array2) => {

    const _array2 = Array.from(array2);
    const difference = [];

    array1.forEach((array1Item) => {
        const matchedIndex = _array2.findIndex(array2Item => array2Item === array1Item);
        if (matchedIndex > -1) {
            // Remove from second array
            _array2.splice(matchedIndex, 1);
        } else {
            // No match found, add to difference array
            difference.push(array1Item);
        }
    });

    // Return the remaining items in _array2 and difference
    return [ ..._array2, ...difference ];
}

通过复制第二个数组,您可以从中删除任何匹配项。并且通过将其与匹配的array1&gt;组合。 array2,你会得到两个方向的差异,包括重复。

工作小提琴:https://jsfiddle.net/3v34tjnq/