还有一个关于typeof的问题。它不包括这些例子。
为什么不使用arrNew在第一个filter()中使用0进行类型操作?
它使用arrNew02在第二个filter()中工作。
如果我在if语句中返回之前放入console.log语句,它会将0识别为typeof“number”。
function filterArray(arr){
var arrNew = arr.filter(function(item){
if(typeof item === "number"){
console.log("typeof item: " + item + " " + typeof item);
return item;
}
});
console.log("arrNew: " + arrNew);
var arrNew02 = arr.filter(function(item){
return(typeof item === "number");
});
console.log("arrNew02: " + arrNew02);
}
filterArray([1, "a", "b", 0, 15]);
// This should return [1, 0, 15]
我尝试使用isNaN。但是,它错过了这个例子中的字符串数字。它将返回“1”。
var arrNew03 = arr.filter(function(item){
if(isNaN(item) === false){
return item;
}
});
console.log("arrNew03: " + arrNew03);
filterArray([1, 2, "aasf", "1", "123", 123]);
// This should return [1, 2, 123]
那么,查找项目类型的最佳方法是什么?数字,字符串等有不同的方法吗?我确实阅读了MDN文档。在最后,它有一个链接,为什么typeof不再安全。但是,我不认为这里的相关讨论是相关的。 http://es-discourse.com/t/why-typeof-is-no-longer-safe/15
Array#filter
需要一个truthy值来包含新数组中的元素。
返回值为零的项目不包括此项目。
描述
filter()
为数组中的每个元素调用一次提供的回调函数,并构造一个包含callback
返回a value that coerces totrue
的所有值的新数组。仅对已分配值的数组的索引调用callback
;对于已删除的索引或从未分配过值的索引,不会调用它。不通过callback
测试的数组元素被简单地跳过,并且不包括在新数组中。
数字0
是唯一被转换为布尔值false
的数字。所有其他数字投向true
。如果你为你的过滤结果返回item
,并且item
解析为false
(如果item === 0
它将会这样),那么该项目将被过滤掉。
你需要在第一次true
通话中返回item
而不是arr.filter
。