gpt4 book ai didi

Javascript 过滤函数可过滤掉虚假值

转载 作者:行者123 更新时间:2023-11-28 13:10:26 25 4
gpt4 key购买 nike

我正在学习 javascript,并有以下代码来过滤掉字符串中的虚假值。

function isFalsy(value) {
if(value === false)
return false;
if(value === null)
return false;
if(value === 0)
return false;
if (value ==="")
return false;
if (value === undefined)
return false;
if(value.isNaN)
return false;

return true;

}
function bouncer(arr) {

arr = arr.filter(isFalsy);
return arr;
}

我运行以下命令:

bouncer([1, null, NaN, 2, undefined]);

我除了结果是:

[1,2] 

但它给了我

[1,null, 2]

这是怎么回事?

最佳答案

问题不是 null,而是 NaN;证明:

function isFalsy(value) {
if(value === false)
return false;
if(value === null)
return false;
if(value === 0)
return false;
if (value ==="")
return false;
if (value === undefined)
return false;
if(value.isNaN)
return false;

return true;

}
function bouncer(arr) {

arr = arr.filter(isFalsy);
return arr;
}

console.log(bouncer([1, null, NaN, 2, undefined]));

原因是 if(value.isNaN) 检查 value 上名为 isNaN 的属性是否为真。正确的检查是 if (isNaN(value)),因为 isNaN 是用于测试 NaN 的内置函数(因为 NaN === NaNfalse 所以你不能这样检查):

function isFalsy(value) {
if(value === false)
return false;
if(value === null)
return false;
if(value === 0)
return false;
if (value ==="")
return false;
if (value === undefined)
return false;
if(isNaN(value))
return false;

return true;

}
function bouncer(arr) {

arr = arr.filter(isFalsy);
return arr;
}

console.log(bouncer([1, null, NaN, 2, undefined]));

也就是说,从过滤器回调返回任何虚假值都会删除该条目,因此您根本不需要 isFalsy (除了用于学习目的):

  arr = arr.filter(function(value) { return value; });

function bouncer(arr) {

arr = arr.filter(function(value) { return value; });
return arr;
}

console.log(bouncer([1, null, NaN, 2, undefined]));

关于Javascript 过滤函数可过滤掉虚假值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956433/

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