0
- false, поэтому, если вы 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]));
(также обратите внимание, что вам нужно использовать одно и то же имя функции при объявлении функции и ее вызове - либо используйте array_diff
для обоих, либо arrayDiff
для обоих)
Вы можете уменьшить вычислительную сложность алгоритма с O(n ^ 2)
до O(n)
, используя вместо этого Set, если хотите. Set.has
равно O(1)
, тогда как Array.includes
равно O(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]));