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
}