javascript - 将字符串中的数值相加

标签 javascript regex string

我有一个从端点返回的字符串,我需要将字符串的某些部分加在一起以产生两个不同的值。

示例响应:

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/

相关文章:

java - 如何将分割数组的其余部分转换为java上的字符串?

javascript - 更改 <ol> 中每个 <li> 元素的 onclick

python - 如何从 python 电子邮件对象中获取字符串形式的实际电子邮件地址

regex - bash - 如何从 bash 脚本中将换行符传递给 perl?

Java String.matches() 正则表达式

string - Bash,连接 2 个字符串以引用第三个变量

javascript - 使用 Lodash 按值对对象数组进行排序

javascript - html 溢出 x 失败

javascript - Crypto - SJCL (javascript) 加密是否与 OpenSSL 兼容?

visual-studio - 正则表达式:查找/替换之前没有给定字符串的所有子字符串?