JavaScript过滤器未返回预期的int值

时间:2018-10-11 05:44:44

标签: javascript arrays

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

3 个答案:

答案 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)