在字符串中添加数字

时间:2015-12-01 22:31:36

标签: javascript arrays string

我想取一串数字和字符并加上数字。

例如:“2015年,我想知道iPhone 6+的价格是多少?”

输出:2021

这是我目前的代码:

var str = "In 2015, I want to know how much does iPhone 6+ cost?";

function sumFromString(str){
  var punctuationless = str.replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
  var finalString = punctuationless.replace(/\s{2,}/g," ");
  var StringList = finalString.split(" ");
  var sum = [];
  for (i = 0; i < StringList.length; i++)
    if (isInt(StringList[i])
      sum.add(StringList[i]);
  sum.reduce( (prev, curr) => prev + curr );
}
sumFromString(str);

我的代码接受一个字符串并删除标点符号,然后将每个单词/数字放入数组StringList中。

我无法让下一部分工作。

我尝试的是迭代数组中的每个值。 if语句应该检查数组元素是否是整数。如果是这样,它会将整数添加到名为sum的空数组中。然后我将数组的所有值sum加在一起。

3 个答案:

答案 0 :(得分:3)

更简单:

function sumFromString(str) {
    return (str.match(/\d+/g)||[]).reduce((p,c)=>+c+p);
}

请特别注意,我使用+c+p - +c将字符串中的当前值转换为数字,然后将其添加到p。这匹配字符串中的所有数字 - 如果没有,则获取一个空数组 - 并减少它。

答案 1 :(得分:1)

为了多样化,这里有一种没有正则表达式的方法:

var myString = "5 bunnies ate 6 carrots in 2days.";
var myArray = myString.split('');
var total = 0;
for (var i = 0; i < myArray.length; i++) {
  if (!isNaN(parseInt(myArray[i]))) {
    total += parseInt(myArray[i]);
  }
}

Fiddle Demo

注意:如果myString可能为空,您可能希望在拆分前添加支票。

答案 2 :(得分:0)

使用split函数将字符串拆分为包含所有字符的数组,然后运行filter函数以获取所有数字。使用map功能浏览包含数字的所有元素,并从中删除不是数字的字符。

然后使用reduce获取所有数字的总和。由于我们在此处理字符串,因此我们必须执行type conversion将其转换为数字。

string.split(' ').filter(function(word) {
    return /\d+/.test(word) }
}).map(function(s) {
    return s.replace(/\D/, '')
}).reduce(function(a,b) {
    return Number(a) + Number(b);
});