JavaScript过滤器功能无法通过使用parseInt将项目转换为整数。由于存在字符串连接,因此在reduce函数中使用过滤后的数组时,串联而不是添加值。
var numbers = ['1', 2, 3, 4,'hello'];
var intArray=numbers.filter(num => **parseInt(num)**);
var sum=intArray.reduce((tot, b) => tot+b,0);
答案 0 :(得分:1)
诀窍是先过滤掉非int值,然后将它们全部转换为int 使用isNaN的filter可以消除问候,而使用parseInt进行映射会将字符串o number转换为int
var numbers = ['1', 2, 3, 4, 'hello'];
var intArray = numbers
.filter(num => !isNaN(num)).map(x => parseInt(x))
答案 1 :(得分:0)
您的filter
正在过滤掉不能强制转换为数字的项目,但是这些项目仍不一定是数字-在将+
与{{1 }}:
.map
或者,您可以使用var numbers = ['1', 2, 3, 4, 'hello'];
var intArray = numbers
.filter(num => parseInt(num))
.map(Number);
var sum = intArray.reduce((tot, b) => tot + b, 0);
console.log(sum);
和reduce
一次完成所有操作:
isNaN
答案 2 :(得分:0)
您还可以将它们汇总为一个reduce
,并跳过filter
阶段,在该阶段"1"
被作为有效值传递(已经指出是问题所在)等。
var numbers = ['1', 2, 3, 4,'hello'];
const result = numbers.reduce((r,c) => (+r||0) + (+c||0))
console.log(result)