如何在数组上使用 .filter() 仅删除 'NaN' 而不是字符串和数字?
How can I use .filter() on an array to remove only 'NaN' but not strings and numbers?
我尝试使用 isNaN(value)
和 !isNaN(value)
但我无法在不删除字符串的情况下删除给定代码中的 NaN 元素。 (显然是因为字符串不是数字)。
function cleaner(arr) {
return = arr.filter(function f(value) {return (value !== false && value !== null && value !== 0 && value !== undefined)});
}
cleaner([7, "eight", false, null, 0, undefined, NaN, 9, ""]);
以上代码应该return[7, "eight", 9, ""];
因为你想过滤掉所有虚假值除了空字符串,你只需要
function cleaner(arr) {
return arr.filter(function(value) {
return value === '' || value;
});
}
如果您想过滤掉所有虚假值 包括 空字符串,您可以这样做:
function cleaner(arr) {
return arr.filter(Boolean);
}
检测x
是否为NaN
的一些方法:
Number.isNaN(x)
(ES6)
Object.is(x, NaN)
(ES6)
x !== x
(typeof x === 'number') && isNaN(x)
注意:单独使用 isNaN
并不是检查值是否为 NaN
!
的可靠方法
这将 return 只有数字(没有 0)和字符串(包括空字符串)。
function cleaner(arr) {
return arr.filter(function(item){
return typeof item == "string" || (typeof item == "number" && item);
/** Any string**/ /** Numbers without NaN & 0 **/
});
}
console.log(cleaner([7, "eight", false, null, 0, undefined, NaN, 9, ""]));
//[7, "eight", 9, ""]
使用 ES2015 Arrow Function 语法
array.filter(item => typeof item == "string" || (typeof item == "number" && item));
var filteredArr = [7, "eight", false, null, 0, undefined, NaN, 9, ""].filter(item => typeof item == "string" || (typeof item == "number" && !isNaN(item) && item));
console.log(filteredArr);
我尝试使用 isNaN(value)
和 !isNaN(value)
但我无法在不删除字符串的情况下删除给定代码中的 NaN 元素。 (显然是因为字符串不是数字)。
function cleaner(arr) {
return = arr.filter(function f(value) {return (value !== false && value !== null && value !== 0 && value !== undefined)});
}
cleaner([7, "eight", false, null, 0, undefined, NaN, 9, ""]);
以上代码应该return[7, "eight", 9, ""];
因为你想过滤掉所有虚假值除了空字符串,你只需要
function cleaner(arr) {
return arr.filter(function(value) {
return value === '' || value;
});
}
如果您想过滤掉所有虚假值 包括 空字符串,您可以这样做:
function cleaner(arr) {
return arr.filter(Boolean);
}
检测x
是否为NaN
的一些方法:
Number.isNaN(x)
(ES6)Object.is(x, NaN)
(ES6)x !== x
(typeof x === 'number') && isNaN(x)
注意:单独使用 isNaN
并不是检查值是否为 NaN
!
这将 return 只有数字(没有 0)和字符串(包括空字符串)。
function cleaner(arr) {
return arr.filter(function(item){
return typeof item == "string" || (typeof item == "number" && item);
/** Any string**/ /** Numbers without NaN & 0 **/
});
}
console.log(cleaner([7, "eight", false, null, 0, undefined, NaN, 9, ""]));
//[7, "eight", 9, ""]
使用 ES2015 Arrow Function 语法
array.filter(item => typeof item == "string" || (typeof item == "number" && item));
var filteredArr = [7, "eight", false, null, 0, undefined, NaN, 9, ""].filter(item => typeof item == "string" || (typeof item == "number" && !isNaN(item) && item));
console.log(filteredArr);