我有一个从端点返回的字符串,我需要将字符串的某些部分加在一起以产生两个不同的值。
示例响应:
149,226;147,226;146,224
现在我知道我可以使用一元加号运算符强制将字符串视为数字。
var num1 = '20',
num2 = '22';
var total = (+num1) + (+num2);
或者我可以像这样做一些转换
var number1 = parseInt(num1);
var number2 = parseInt(num2);
var total = number1 + number2;
这些都可以正常工作,但这并不是我想要的。
我要取这个结果
149,226;147,226;146,224
然后将第一个出现者之前的所有数字相加,得到 (149, 147, 146) 以产生一个结果,然后将第二个出现者之后的所有数字相加 (226, 226, 224)。
我知道我可能需要某种正则表达式,我只是不知道是什么。
最佳答案
您可以只使用 string.split,两次,一次用于 ;然后再次为 ,.并将其放入 array.reduce。
例如。
var str = '149,226;147,226;146,224';
var result = str.split(';')
.reduce((a,v) => {
var vv = v.split(',');
a[0] += vv[0] | 0;
a[1] += vv[1] | 0;
return a;
}, [0, 0]);
console.log(result);
对于更通用的解决方案,可以处理任意数量的子字符串,例如。 1,2,3;4,5,6
,还可以处理替代拆分类型,并处理额外的、
或;
。
function sumStrings(str, outerSplit, innerSplit) {
return str.split(outerSplit || ';')
.filter(Boolean)
.reduce((a,v) => {
v.split(innerSplit || ',')
.filter(Boolean)
.forEach((v,ix) => {
a[ix] = (a[ix] | 0) + (v | 0);
});
return a;
}, []);
}
console.log(sumStrings(
'149,226;147,226;146,224'
));
console.log(sumStrings(
'149.226.201|147.226.112.|146.224.300|',
'|','.'));
//how about total of totals?
console.log(sumStrings(
'149,226;147,226;146,224'
).reduce((a,v) => a + v));
.as-console-wrapper {
min-height: 100%
}
关于javascript - 将字符串中的数值相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65309153/