我想取一串数字和字符并加上数字。
例如:“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加在一起。
答案 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]);
}
}
注意:如果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);
});