我正在尝试通过代码战解决卡塔。 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:我是初学者
答案 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中存在的所有值。
它仅适用于这种情况,反之则不然。