function sumDigits(num) {
// your code here
let nums = num.toString();
let sum = 0;
for(let i = 0;i<nums.length;i++){
Number(nums[i]);
console.log(typeof nums[i]);
sum += nums[i];
}
return sum;
}
var output = sumDigits(1148);
console.log(output); // --> 14
有人能解释一下为什么Number(nums[i])不改变变量的类型吗?或者有什么其他的方法可以解决这个问题吗?这个函数应该接受一个整数值,把所有的数字相加,然后返回一个整数。
当我试图运行代码时,我无法将字符串转换回数字,只能将总和的值添加到字符串的前面。
3条答案
按热度按时间oxosxuxt1#
你并没有保存
Number(nums[i])
返回的值,但是由于你并没有多次使用它,你可以直接把它加到和中,而不把它赋给变量。z31licg02#
Number
不会改变它所使用的值(当它用于字符串时,无论如何都不会改变,因为JavaScript中的字符串是不可变的),它只返回一个数字,所以必须使用该返回值。试试这个:
dkqlctbz3#
要修复代码,请将
sum += nums[i];
更改为sum += Number(nums[i]);
。原因:将字符串添加到数字时,首先将数字转换为字符串,然后执行字符串串联。下面是一个函数式编程方法来回答你的问题:
函数式编程使代码更具可扩展性、模块化、可重用性、可执行性和可测试性。
JavaScript中的函数式编程:https://opensource.com/article/17/6/functional-javascript
.reduce()
文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce以下是Map Reduce方法的相同情况:
Map缩小简介:https://medium.com/poka-techblog/simplify-your-javascript-use-map-reduce-and-filter-bd02c593cc2d