javascript - js fliter这到底是为什么呢,过滤失败?
本文介绍了javascript - js fliter这到底是为什么呢,过滤失败?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
[{
"id": "YZ-WDW-8",
"number": "8",
"pl": 9.8
}, {
"id": "YZ-WDW-9",
"number": "9",
"pl": 9.8
}, {
"id": "YZ-WDW-BIG",
"number": "大",
"pl": 1.97
}]
如图 ,上面的数据,我用filter函数过滤,为什么过滤失败?
函数是这样写的
arr.filter(function(item,index){
return Number(item.id.split('-')[2])!==NaN;
});
但是没有把最后一项过滤掉,为什么呢?
解决方案
NaN
(not a number),是一个特殊的数值。之所以称它为「非数值」,是因为它不能参与算数运算,任何涉及 NaN
的操作都返回 NaN
。并且 NaN
与任何值都不相等(包括自身)。例如:
console.log(typeof NaN); // "number"
console.log(0 / 0); // NaN
console.log(NaN - NaN); // NaN
console.log(Infinity - Infinity); // NaN
var a = NaN;
console.log(a === a); // false
所以在判断 NaN
时,不能使用 ===
,只能使用 isNaN()
方法,你的代码应该改成下面这样。
var arr = [{
"id": "YZ-WDW-8",
"number": "8",
"pl": 9.8
}, {
"id": "YZ-WDW-9",
"number": "9",
"pl": 9.8
}, {
"id": "YZ-WDW-BIG",
"number": "大",
"pl": 1.97
}];
arr.filter(function(item, index) {
return !isNaN(item.id.split('-')[2]);
});
更多内容可参考《JavaScript 闯关记》之变量和数据类型。
这篇关于javascript - js fliter这到底是为什么呢,过滤失败?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文