繁体   English   中英

使用 JavaScript 计算数字的总和

[英]Sum of a number's digits with JavaScript

我有:

var nums = [333, 444, 555]; 

我想将数字中的每个数字视为一个单独的数字并将它们加在一起。 在这种情况下,总和应该是:

9 = 3 + 3 + 3
12 = 4 + 4 + 4
15 = 5 + 5 + 5 

如何使用 JavaScript 实现这一点?

您可以使用简单的模运算和除法

var a = [111, 222, 333];

a.forEach(function(entry) {
    var sum = 0;
    while(entry > 0) 
    {
        sum += entry%10;
        entry = Math.floor(entry/10);
    }
    alert(sum)
});

这是一种不同的方法,将数字转换为字符串,然后将它们转换为字符数组,然后将字符重新转换为数字,然后使用reduce将数字相加。

var nums = [333, 444, 555];
var digitSums = nums.map(function(a) {
  return Array.prototype.slice.call(a.toString()).map(Number).reduce(function(b, c) {
    return b + c;
  });
});
digitSums; // [9, 12, 15]

如果您的数组包含更大的数字(会溢出或变为Infinity ),您可以在数组中使用字符串,并可选择删除.toString()

var nums = [333, 444, 555]; 

nums.map(number => [...String(number)].reduce((acc, num) => +num+acc , 0));

//输出 [9, 12, 15]

一元加号运算符 (+num) 将字符串转换为整数。

如果要生成由每个数字之和组成的数组,可以结合使用.map() / .reduce()方法。 .map()方法将根据返回值(在初始数组的每次迭代时生成.map()创建一个新数组。

在每次迭代中,将数字转换为字符串 ( num.toString() ),然后使用.split()方法生成数字数组。 换句话说, 333将返回[3, 3, 3] 然后使用.reduce()方法将当前/以前的数字相加,以计算值的总和。

 var input = [333, 444, 555]; var sumOfDigits = input.map(function(num) { return num.toString().split('').reduce(function(prev, current) { return parseInt(prev, 10) + parseInt(current, 10); }, 0); }); //Display results: document.querySelector('pre').textContent = 'Input: ' + JSON.stringify(input, null, 4) + '\\n\\nOutput: ' + JSON.stringify(sumOfDigits, null, 4);
 <pre></pre>

现在,利用ES6的优势,您可以简单地将数组的每个值分布map ,并且 with reduce进行操作:

 var numbers = [333, 444, 555]; const addDigits = nums => nums.map( num => [...num.toString()].reduce((acc, act) => acc + parseInt(act), 0) ); console.log(addDigits(numbers));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM