为什么此函数会过滤掉“空”值
Why does this function filter out 'null' values?
我正在尝试编写一个快速函数来过滤掉任何虚假值。 这似乎抓住了除"null"之外的所有内容。
请帮忙!
function noFalsy(arr) {
var none=function(val){
switch (val){
case false:
case null:
case "":
case 0:
case undefined:
case NaN:
return false;
default:
return true;
}
},
ans=[];
ans=arr.filter(none);
return ans;
}
你不能检查这样的NaN
。
在 JavaScript 中,NaN !== NaN
是true
。这就是为什么你应该使用 Number.isNaN 来检查一个值是否NaN
;这也是筛选器不适用于NaN
值的原因。switch 语句永远不会到达NaN
事例的正文,因为内部相等性检查将始终失败。
如果你只想过滤掉虚假值,你可以依靠它们的虚假性,而不是检查它们的确切值,这要快得多:
[1, null, undefined, NaN, 0, "", true].filter(x => x); // [1, true]
首先,您当前的代码确实过滤掉了null
值(但它不会过滤掉NaN
)。看看我在说什么。
在您的示例中,请务必注意NaN !== NaN
因为现在有办法判断"不是数字"是否与另一个"不是数字"的元素相同。
从数组中省略任何虚假值的一种更简单的方法是遍历数组,并返回任何真实的值:
function noFalsy(arr){
var output = [];
arr.filter(function(element){
// If the element is not falsy, add it to our output array
if(element){
output.push(element);
}
});
return output;
}
console.log(noFalsy([1, true, 0, null, false, NaN])); // => [1, true]
工作小提琴
相关文章:
- 为什么此函数会过滤掉“空”值
- 如何在redux模块中创建一个helper类型的函数,从state返回一组经过过滤的只读数据
- 如何通过类名和过滤函数获取属性值
- 如何使用filter函数在javascript中过滤对象
- 使用 p5 和 Javascript 过滤显示内容的函数
- 返回列表的函数 - 过滤输出时出现问题
- jQuery .not() 没有从函数 - Ideas 中过滤元素
- JavaScript 函数检索输入 [type=number] 并根据值过滤它们
- 如何过滤数组并将其与 Javascript 中的函数参数进行比较
- 点击Angular过滤列表中的函数
- 用javascript创建简单过滤函数的最佳方法是什么
- 使用angular.forEach函数过滤HTML表以替换许多if/else语句
- 如果过滤函数是异步的,如何使用lodash过滤列表
- 使用函数式编程过滤文字对象
- 如何用纯JavaScript重写这个jQuery搜索过滤函数?
- 基本的Javascript过滤函数在Angular2中不能正常工作
- 过滤函数没有返回正确的值
- 为什么我没有定义这个过滤函数
- javascript中的映射和过滤函数
- 使用多个值在一个jquery过滤函数中的数据属性的例子