对其中包含可选斜杠的字符串求和

时间:2018-06-11 19:30:41

标签: javascript reduce

我需要将字符串数组中的所有值相加,其中一些是空的,一些是正常整数,一些是用斜杠分隔的。当值只是整数或空时,我可以使用它,但是当它们被斜杠分隔时不会。

//this works and should total 30
//var data = ["","1","","2","3","10","14"];

//this doesn't work and should total 166, not 128
var data = ["","1","2","5 / 35","","100 / 3", "20"];

var sum = data.reduce(function (a, b) {
    a = parseInt(a, 10);
    if(isNaN(a)){ a = 0; }

    b = parseInt(b, 10);
    if(isNaN(b)){ b = 0; }

    return a + b;
});

console.log(sum);

这是一个带有示例的代码簿......

https://codepen.io/murphydan/pen/GGWwgE?editors=0011

2 个答案:

答案 0 :(得分:3)

我想你只想总结数组中的所有数字,无论元素内容是什么(因为你想要的结果是166)。您可以简单地拆分并使用另一个reduce

const data = ["", "1", "2", "5 / 35", "", "100 / 3", "20"];
const res = data.reduce((a, b) => {
  const t = b.split('/');
  return a + t.reduce((x, y) => x + Number(y), 0);
}, 0);


console.log(res);

如果你需要它更灵活,例如如果斜杠也可能是其他东西,比如逗号,短划线等等,你也可以用非数字分割。 split(/\D/)。这将创建一些更多的数组条目,因为每个空格都会获得另一个条目,但这不会改变结果。

答案 1 :(得分:-1)

我喜欢避免嵌套.reduce()等函数。

像:



const data = ["", "1", "2", "5 / 35", "", "100 / 3", "20"];

const res = data.join(' ')// to a single string
    .replace(/\//g, '')// replace all slashes
    .split(/\s/)// split on whitespace to array
    .reduce((acc, n) => (acc + (parseInt(n) || 0)) ,0);// sum all numbers
 


console.log(res);