将数组中的数字相加

时间:2018-11-27 15:41:06

标签: javascript arrays reduce

我一直在关注this帖子,但无法获取数组来将数组中的所有数字相加。

我用这个:

 var array_new = [$(".rightcell.emphasize").text().split('€')];

给我这个数组:

array_new: ,102.80,192.60,22.16

然后我这样做:

var sum = array_new.reduce((a, b) => a + b, 0);
  console.log(sum); //gives me this 0,102.80,192.60,22.16

当我要做的就是将数字加起来时,得到的结果是 0,102.80,192.60,22.16。有人可以建议我吗?

4 个答案:

答案 0 :(得分:1)

由于数组由undefined和一串字符串组成,因此您必须解析值以获取数字。答案将是:

var data = [,'102.80','192.60','22.16'];

console.log(data.reduce((r,c) => r + parseFloat(c), 0))

但是,如果您不想处理该函数中的解析,则可以确保将数组显示为数字数组,如下所示:

Array.from([$(".rightcell.emphasize").text().split('€')], (x) => parseFloat(x || 0))

这将使您的数组准备好求和,而无需在Array.reduce内部进行解析。所以会是这样:

var strings = [,'102.80','192.60','22.16'];
var numbers = Array.from(strings, (x) => parseFloat(x || 0))

console.log(numbers.reduce((r,c) => r + c, 0))

但是在您的情况下,它会更短一些,因为您将前两行作为第二行代码片段中所示的那样处理。

答案 1 :(得分:0)

那是因为您的原始数组是字符串数组。

使用parseFloat从字符串中创建数字。

var strArr = ['102.80','192.60','22.16'];
var sum = strArr.reduce((a,b) => a + parseFloat(b),0); // 317.56

答案 2 :(得分:0)

您在数组中的元素被视为字符串,因此reduce函数中的 + 将数组元素连接到另一个字符串中。尝试使用parseFloat()将它们视为数字:

var sum = array_new.reduce((a, b) => a + parseFloat(b), 0);

编辑:感谢charlietfl所提到的parseFloat(a)是多余的,对此进行了修复。

编辑:(因为您已经删除了注释,所以这将是您解决问题的方法):在您的情况下,该解决方案将不起作用,因为您的数组元素之一是“”(空字符串),可以不会被视为数字,因此您可以先映射数组值,然后再尝试将其相加:

array_new.map(a => (a == "") ? "0" : a);

答案 3 :(得分:0)

在javascript中,您也可以用+或字符串连接数字。 我给你举个例子:

var x = "2" + "1"; // x = 21
var x = 2 + 1 ; // x = 3

您可以查看this

您应该将数组转换为整数(parseInt)或浮点数(parseFloat) 在此函数中array_new.reduce((a,b)=> a + b,0); 就像

array_new.reduce((a, b) => a + parseInt(b), 0);//or
array_new.reduce((a, b) => a + parseFloat(b), 0);