为什么过滤方法不返回数字0

jpl*_*jpl 2 javascript array-filter

当我使用过滤器时,数字0不包含在新数组中:

function arrayDiff(a, b) {
   return a.filter(value => {
       if(!b.includes(value)){
        return value;
      }; 
   });
}

array_diff([1, 2, 0, 4, 2, 6, 4, 1, 4, 0] ,[2,5]);

Run Code Online (Sandbox Code Playgroud)

返回值是:[1, 4, 6, 4, 1, 4]。看看如何缺少0。

我还尝试仅返回数字0,但返回了空数组。

如何解决将.filter0成功包含在结果中的问题?

Cer*_*nce 5

0为falsey,因此return value,如果value为false,则不会包含在结果数组中。true而是返回-或更简单地,只需返回!b.includes(value)

function array_diff(a, b) {
   return a.filter(value => !b.includes(value));
}

console.log(array_diff([1, 2, 0, 4, 2, 6, 4, 1, 4, 0] ,[2,5]));
Run Code Online (Sandbox Code Playgroud)

(还请注意,在声明函数并调用它时,您需要使用相同的函数名称-两者都使用array_diff,或arrayDiff两者都使用)

如果需要,可以O(n ^ 2)改为O(n)使用Set来降低算法的计算复杂度。Set.hasO(1)的,而Array.includesO(n)

function array_diff(a, b) {
  const set = new Set(b);
  return a.filter(value => !set.has(value));
}

console.log(array_diff([1, 2, 0, 4, 2, 6, 4, 1, 4, 0] ,[2,5]));
Run Code Online (Sandbox Code Playgroud)