/ / Próba zwrócenia sumy liczb w ciągu. Jeśli ciągiem jest „99Hello1”, wyjście to 100, jeśli jest to „9hello9”, odpowiedź to 18. Uderzył się w nieświadomy błąd - javascript, tablice

Próbuje zwrócić sumę liczb w ciągu. Jeśli ciąg ma wartość „99Hello1”, wartość wyjściowa to 100, jeśli jest to „9hello9”, odpowiedź ma wartość 18. Uderzony błędem nieświadomości - javascript, tablice

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"));

Próbuję rozwiązać problem, najpierw przechodząc przez pętlę i zbierając wszystkie liczby, a następnie sumując.

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz użyć wyrażenia regularnego do dopasowania liczb i zredukować otrzymaną tablicę.

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

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


0 dla odpowiedzi nr 2

Możesz również wykonać tę pracę z jednym stopniem redukcji.

var s = Array.prototype.reduce.call("99Hello9", (r,c) => isNaN(+c) ? r : +c+r, 0);
console.log(s);