试图返回字符串中数字的总和。如果string是“99Hello1”,则输出为100,如果是“9hello9”,则答案为18.遇到无能为力的错误

问题描述 投票:0回答:2
function NumberSearch(str) {
    var arr = str.split("");
    var sum = 0;
    var twoDigit = [];
    var two;
    var res = [];
    var arrFormat = preProcess(arr);
    console.log(arrFormat);
    //this function returns an array that has all numbers from the string
    function preProcess(ele) {
        for (var i = 0; i < ele.length; i++) {
            if (typeof ele[i] === 'number' && typeof ele[i + 1] === 'number') {
                twoDigit.push(ele[i], ele[i + 1]);
                two = twoDigit.join("");
                res.push(two);
            } else {
                if (typeof ele[i] === 'number' && typeof ele[i + 1] !== 
            'number') {
                    res.push(ele[i]);
                }
            }
        }
        return res;
    }
    for (var k = 0; k < arrFormat.length; k++) {
        sum = sum + arrFormat[k];
    }
    return sum;
}

console.log(NumberSearch("99Hello1"));

我试图通过首先循环字符串并收集所有数字然后总结来解决问题。

javascript arrays
2个回答
2
投票

您可以使用正则表达式来匹配数字并减少获取的数组。

function sum(string) {
    return (string.match(/\d+/g) || []).reduce(function (a, b) { return a + +b; }, 0)
}

console.log(['99hello1', '9hello9'].map(sum));

0
投票

您也可以通过一个简化阶段执行此工作。

var s = Array.prototype.reduce.call("99Hello9", (r,c) => isNaN(+c) ? r : +c+r, 0);
console.log(s);
© www.soinside.com 2019 - 2024. All rights reserved.