我有一个像这样的数组:
let arr = ['1','2','0','3','0',undefined,'0',undefined,'3','',''];
为了过滤未定义的'和''这个数组的元素并将其转换为数字,我喜欢这样:
arr = arr.filter(function(e){
if(e){
return parseInt(e);
}
});
我得到了:
[1,2,3,3]
0也被过滤了,因为'返回0'意味着'返回false';
我想知道你通常如何处理这类问题?
我看到以下答案提出了许多有用的方法。 我从中学到了很多东西。
如果数组中的元素需要是数字而不是字符串,我应该再次遍历数组吗?或者有一种替代的一步法?
答案 0 :(得分:4)
替换
return parseInt(e);
与
return !isNaN(e);
<强>演示强>
var arr = ['1','2','0','3','0',undefined,'0',undefined,'3','',''];
var output = arr.filter(function(e){
if(e){
return !isNaN(e);
}
});
console.log( output );
&#13;
修改强>
要将值转换为数字,只需将.map( Number )
添加到过滤器输出
<强>演示强>
var arr = ['1','2','0','3','0',undefined,'0',undefined,'3','',''];
var output = arr.filter(function(e){
if(e){
return !isNaN(e);
}
}).map( Number );
console.log( output );
&#13;
答案 1 :(得分:3)
你可以链接想要的条件。
big_writes
答案 2 :(得分:2)
使用数组链函数很容易:
let arr = ['1', '2', '0', '3', '0', undefined, '0', undefined, '3', '', '']
// filter valid elements (undefined and '' evaluates to false)
.filter(e => e)
// to exclude '0' from the list, do a bitwise-or
//.filter(e => e|0)
// cast into numbers
.map(e => e * 1);
console.log(arr);
&#13;
答案 3 :(得分:1)
略有改变
let arr = ['1','2','0','3','0',undefined,'0',undefined,'3','',''];
arr = arr.filter(function(e){
if( parseInt(e) >=0 ){
return e;
}
});
console.log(arr);
答案 4 :(得分:0)
let arr = ['1','2','0','3','0',undefined,'0',undefined,'3','',''];
let result = [];
for(let item of arr) {
let num = +item;
if(item === '' || Number.isNaN(num)) {
continue;
}
result.push(num);
}
console.log(result);
答案 5 :(得分:0)
您可以RegExp.prototype.test()
与RegExp
/^\d+$/
一起使用来检查该值是否为一位数或多位数
arr = arr.filter(n => /^\d$/.test(n))
答案 6 :(得分:0)
{{1}}