Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Js如何从字符串中得到数字的和?_Javascript_String_Sum - Fatal编程技术网

Javascript Js如何从字符串中得到数字的和?

Javascript Js如何从字符串中得到数字的和?,javascript,string,sum,Javascript,String,Sum,我对编码还不熟悉,有人问我这个问题 创建一个函数,该函数接受由字母和数字组成的字符串。它应该将字符串中出现的所有数字相加并返回总数 E.g. 'foo5bar6cat1' => 12 'foo99cat' => 18 提示:对于本例,了解JavaScript中的值NaN的行为异常可能很有用。例如,如果您使用NaN的类型,它会告诉您这是一个“数字”。奇怪吧 我写的代码是这样的 function sumDigitsFromString(str) { let nums = [

我对编码还不熟悉,有人问我这个问题

创建一个函数,该函数接受由字母和数字组成的字符串。它应该将字符串中出现的所有数字相加并返回总数

   E.g. 'foo5bar6cat1' => 12
   'foo99cat' => 18
提示:对于本例,了解JavaScript中的值
NaN
的行为异常可能很有用。例如,如果您使用NaN的
类型,它会告诉您这是一个
“数字”
。奇怪吧

我写的代码是这样的

function sumDigitsFromString(str) {
let nums = []
let sum = 0

for (let i = 0; i < str.length; i++) {
if (typeOf (arr[i]) === "number") {
 nums.push(str[i])
    }
}
 for (let i = 0; i < nums.length; i++){
sum.push(nums[i] + sum)
   }
return sum
}

有人对如何修复我的代码有什么建议吗?

由于许多原因,您的方法无法工作,请尝试按以下方式更改您的方法,它应该可以解决问题

function sumDigitsFromString(str) {
    var sum = 0;
    var numbers = str.match(/\d+/g).map(Number);
    for (var i = 0; i < numbers.length; i++) {
        sum += numbers[i]
    }
    return sum;
}
函数sumDigitsFromString(str){
var总和=0;
变量编号=str.match(/\d+/g).map(编号);
对于(变量i=0;i
您几乎走上了正确的轨道

if (typeOf (arr[i]) === "number") {
我想你是想用
str[I]
而不是
arr[I]
<代码>arr
之前未定义

if (typeof(str[i]) === "number") {
这永远是错误的。每个
str[i]
都是一个字符串。正确的方法是使用:

if (!isNaN(Number(str[i]))) {
如果
str[i]
不是数字,
number(str[i])
将返回
NaN

nums.push(str[i])
你需要的是数字而不是字符串。使用编号(str[i])

sum
是数字类型。你不能推一个数字。你需要增加这个数字。改用
sum+=nums[i]

因此,完整的工作代码为:

函数sumDigitsFromString(str){
设nums=[];
设和=0;
for(设i=0;i
这应该可以达到使用ES6语法的目的。

  • typeOf
    应该是
    typeOf
    。但是,您不希望在代码中使用这个字符串,因为它将为字符串数组中的所有元素提供一个字符串值
  • 使用
    parseInt()

    函数sumDigitsFromString(str){
    设nums=[]
    设和=0
    for(设i=0;i
函数编号(str){
var strArr=str.split(“”),strTemp=0;

对于(i=0;i另一种解决方案,如果您将数字作为字符串中系列的组合进行求解(即'zz11yx33ab'->44)或('020a010b030c11'->71)

let字符串='020a010b030c11';
函数数(字符串){
设pos=1;
设numArray=[];
设numString=null;
for(让字符串的个数){
设isParsed=isNaN(parseInt(num));
如果(!numString&&!isParsed&&pos==string.length){
numaray.push(num);
}如果(!numString&&!isParsed&&pos!==string.length),则为else{
numString=num;
}else if(numString&&!isParsed&&pos==string.length){
numString+=num;
numaray.push(numString);
}else if(numString&&isParsed&&pos==string.length){
numaray.push(numString);
}else if(numString&&!isParsed){
numString+=num;
}else if(numString&&isParsed&&pos!==string.length){
numaray.push(numString);
numString=null;
}如果(!numString&&isParsed&&pos==string.length),则为else{
numString+=num;
numaray.push(numString);
}
pos++;
}
console.log('numAray:',numArray);
设result=null;
对于(让numArray的数量){
let value=parseInt(num);
结果+=数值;
}
返回结果;
}
设finalNum=sumNumbers(字符串);

console.log(finalNum);
您在
typeOf(arr[i])==“number”
中使用
arr
而不是
str
。您可以使用Regex:
let sum=0;'foo5bar6cat1'。替换(/\d/g,n=>sum+=+n);返回sum;
'foo5bar6cat1'。拆分(/[^0-9]/)。过滤(布尔)。映射(number)。减少((x,y)=>x+y,0)
@blex非常好!
typeof(str[i])==“number”
将始终为
false
,因为
str[i]
返回字符串
nums.push(str[i])
sum.push(nums[i] + sum)
let sum =0;
for(char of string)
    isNaN(parseInt(char)) ? sum=sum+0:sum=sum+parseInt(char);
function sumDigitsFromString(str) {
    let nums = []
    let sum = 0

    for (let i = 0; i < str.length; i++) {
        if (!isNaN(parseInt(str[i]))) {
            sum += parseInt(str[i])
        }
    }
    return sum
}