javascript 当我这样使用Number()函数时,为什么它不起作用?

3hvapo4f  于 2023-01-29  发布在  Java
关注(0)|答案(3)|浏览(276)
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])不改变变量的类型吗?或者有什么其他的方法可以解决这个问题吗?这个函数应该接受一个整数值,把所有的数字相加,然后返回一个整数。
当我试图运行代码时,我无法将字符串转换回数字,只能将总和的值添加到字符串的前面。

oxosxuxt

oxosxuxt1#

你并没有保存Number(nums[i])返回的值,但是由于你并没有多次使用它,你可以直接把它加到和中,而不把它赋给变量。

function sumDigits(num) {
  // your code here
  let nums = num.toString();
  let sum = 0;

  for (let i = 0; i < nums.length; i++) {
    sum += Number(nums[i]);
  }

  return sum;
}

var output = sumDigits(1148);
console.log(output); // --> 14
z31licg0

z31licg02#

Number不会改变它所使用的值(当它用于字符串时,无论如何都不会改变,因为JavaScript中的字符串是不可变的),它只返回一个数字,所以必须使用该返回值。
试试这个:

for(let i = 0; i < nums.length; i++){
    sum += Number(nums[i]);
}
dkqlctbz

dkqlctbz3#

要修复代码,请将sum += nums[i];更改为sum += Number(nums[i]);。原因:将字符串添加到数字时,首先将数字转换为字符串,然后执行字符串串联。
下面是一个函数式编程方法来回答你的问题:

function sumDigits(num) {
  return num.toString()        // convert number to string
    .split('')                 // split into array of chars
    .reduce((acc, val) => {    // reduce array to sum of items
      return acc + Number(val)
    }, 0);
}

var output = sumDigits(1148);
console.log(output); // --> 14

函数式编程使代码更具可扩展性、模块化、可重用性、可执行性和可测试性。
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方法的相同情况:

function sumDigits(num) {
  return num.toString()        // convert number to string
    .split('')                 // split into array of chars
    .map(char => Number(char)) // change each char in array to number
    .reduce((acc, val) => {    // reduce array to sum of items
      return acc + val
    }, 0);
}

var output = sumDigits(1148);
console.log(output); // --> 14

Map缩小简介:https://medium.com/poka-techblog/simplify-your-javascript-use-map-reduce-and-filter-bd02c593cc2d

相关问题