在javascript中使用值0过滤数组

时间:2018-01-12 06:45:44

标签: javascript

我有一个像这样的数组:

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';

我想知道你通常如何处理这类问题?

更新

我看到以下答案提出了许多有用的方法。 我从中学到了很多东西。

如果数组中的元素需要是数字而不是字符串,我应该再次遍历数组吗?或者有一种替代的一步法?

7 个答案:

答案 0 :(得分:4)

替换

return parseInt(e);

return !isNaN(e);

<强>演示

&#13;
&#13;
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;
&#13;
&#13;

修改

要将值转换为数字,只需将.map( Number )添加到过滤器输出

<强>演示

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:3)

你可以链接想要的条件。

big_writes

答案 2 :(得分:2)

使用数组链函数很容易:

&#13;
&#13;
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;
&#13;
&#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}}