在javascript中筛选值为0的数组
我得到了这样一个数组:在javascript中筛选值为0的数组,javascript,Javascript,我得到了这样一个数组: let arr = ['1','2','0','3','0',undefined,'0',undefined,'3','','']; arr = arr.filter(function(e){ if(e){ return parseInt(e); } }); 为了筛选此数组的“undefined”和“”元素并将其转换为数字,我执行以下操作: let arr = ['1','2','0','3','0',undefined,'0',und
let arr = ['1','2','0','3','0',undefined,'0',undefined,'3','',''];
arr = arr.filter(function(e){
if(e){
return parseInt(e);
}
});
为了筛选此数组的“undefined”和“”元素并将其转换为数字,我执行以下操作:
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也已被筛选,因为“return 0”表示“return false”
我想知道你通常如何处理这种问题
更新:
我看到下面的答案提出了许多有用的方法。
我从中学到了很多
如果数组中的元素需要是一个数字,而不是一个字符串,我应该再次遍历数组吗?或者有替代的一步法?替换
return parseInt(e);
与
演示
var-arr=['1'、'2'、'0'、'3'、'0',未定义、'0',未定义、'3'、'',';
var输出=阵列滤波器(功能(e){
如果(e){
返回!伊斯南(e);
}
});
控制台日志(输出)代码>略有变化
设arr=['1','2','0','3','0',未定义,'0',未定义,'3','',''''];
arr=arr.filter(函数(e){
如果(parseInt(e)>=0){
返回e;
}
});
控制台日志(arr)代码>使用数组链函数很容易:
让arr=['1','2','0','3','0',未定义,'0',未定义,'3','''']
//筛选有效元素(未定义且“”的计算结果为false)
.filter(e=>e)
//要从列表中排除“0”,请按位或
//.filter(e=>e | 0)
//数不清
.map(e=>e*1);
控制台日志(arr)代码>
设arr=['1','2','0','3','0',未定义,'0',未定义,'3','',''''];
让结果=[];
用于(arr的let项目){
设num=+项;
如果(项目==''||编号.isNaN(编号)){
继续;
}
结果:推送(num);
}
控制台日志(结果)
您可以使用RegExp.prototype.test()
和RegExp
/^\d+$/
来检查值是否为一个或多个数字
arr = arr.filter(n => /^\d$/.test(n))
你可以把想要的条件连起来
let数组=['1','2','0','3','0',未定义,'0',未定义,'3','';
数组=数组
.filter(布尔)//仅获取truthy值
.地图(编号);//将所有值转换为数字
console.log(数组)代码>
设arr=['1','2','0','3','0',未定义,'0',未定义,'3','',''''];
//将所有内容映射到数字(未定义变为NaN)
//过滤所有有效数字
arr=arr.map(Number).filter(e=>!isNaN(e))
控制台日志(arr)代码>!伊斯南(e);它不能过滤空字符串。@赵志明是的,请检查演示。if(e){
过滤空字符串,而不是!isNaN
@KoshVery我的意思是我的答案是过滤掉空字符串,而不是!isNaN
,这在OP中已经发生了。很抱歉误解!您忘记了数字的转换…谢谢,结果数组中的元素是字符串,我希望它们是数字,对吗我再次遍历数组?或者有其他单步方法吗?你是说“数字”还是“整数”?