gpt4 book ai didi

javascript - array.filter() 删除函数表达式中的 值,但不删除箭头函数中的值

转载 作者:行者123 更新时间:2023-12-01 00:12:57 24 4
gpt4 key购买 nike

我正在解决一个问题,即函数 array_diff 返回数组 a 中的值,而该值也在数组 b 中。

由于我一直在了解命名函数表达式比匿名粗箭头函数更适合控制台调试,因此我尝试使用命名 removeDuplicate 函数来过滤我的数组来解决此问题。

但是,我无法阻止过滤函数自动从返回的数组中删除错误值 0。

命名函数表达式:

function array_diff(a, b) {
return a.filter(function removeDuplicate(x) { if(b.indexOf(x) == -1) return x; });
}

array_diff([0,1,2,3,4],[2,4]); // [1, 3]

匿名胖箭头功能:

function array_diffTwo(a, b) {
return a.filter((x) => { return b.indexOf(x) == -1 });
}

array_diffTwo([0,1,2,3,4],[2,4]); // [0, 1, 3]

有人可以向我解释为什么 false 值 0 在 array_diff 中被删除,而不是在 array_diffTwo 中删除吗?

最佳答案

问题是您从过滤器回调中返回了 x。如果 x(正在迭代的项)为 false,则结果不会包含在最终数组中,即使 b.indexOf(x) == -1 测试已完成。

对较低的代码执行相同的操作:

return b.indexOf(x) == -1

function array_diff(a, b) {
return a.filter(function removeDuplicate(x) { return b.indexOf(x) === -1 });
}

console.log(array_diff([0,1,2,3,4],[2,4])); // [0, 1, 3]

(顺便说一句,您没有在代码中的任何地方使用箭头函数)

您可以通过创建一组 b 将计算复杂度从 O(n ^ 2) 降低到 O(n),在每次迭代时检查 indexOf :

function array_diff(a, b) {
const bSet = new Set(b);
return a.filter(function removeDuplicate(x) { return !bSet.has(x); });
}

console.log(array_diff([0,1,2,3,4],[2,4])); // [0, 1, 3]

关于javascript - array.filter() 删除函数表达式中的 <falsey> 值,但不删除箭头函数中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com