我需要将字符串数组中的所有值相加,其中一些是空的,一些是正常整数,一些是用斜杠分隔的。当值只是整数或空时,我可以使用它,但是当它们被斜杠分隔时不会。
//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);
这是一个带有示例的代码簿......
答案 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);