Array.filter返回一个空数组

时间:2020-06-21 13:23:27

标签: javascript arrays

我正在尝试通过代码战解决卡塔。 kata的目标是: 您在此kata中的目标是实现一个差异函数,该函数将从另一个列表中减去一个列表并返回结果。

应从列表a中删除列表b中存在的所有值。

arrayDiff([1,2],[1]) == [2] 我决定使用array.filter方法解决该问题。当我在下面运行此代码时,它将返回一个空数组。

function arrayDiff(a, b) {

    let filtered = a.filter(inventa =>{
        b.filter(inventb =>{
            inventa !== inventb
        })
    })

    return filtered;
}

arrayDiff([1,2],[1])
我已经尝试研究可能的原因。我很想解释为什么这样做。

PS:我是初学者

2 个答案:

答案 0 :(得分:1)

尝试:

function arrayDiff(arr1, arr2){
  return arr1
    .filter(x => !arr2.includes(x))
    .concat(arr2.filter(x => !arr1.includes(x)));
}

编辑:说明

此代码首先过滤第一个数组,以删除第二个数组中的所有项目。然后将第一个数组与第二个数组放在一起,将其过滤以删除第一个数组中已经存在的所有元素。

答案 1 :(得分:0)

单行答案:

const arrayDiff = (a, b) => a.filter(r => !b.includes(r));

然后arrayDiff([1,2],[1])给出[2]

应从列表a中删除列表b中存在的所有值。

它仅适用于这种情况,反之则不然。