使用JavaScript计算数字各位数字之和

4

我有:

var nums = [333, 444, 555]; 

我希望你能将数字中的每个数字视为单独的数字并将它们相加。在这种情况下,总和应该是:
```html

我希望你能将数字中的每个数字视为单独的数字并将它们相加。在这种情况下,总和应该是:

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

如何使用JavaScript实现这一目标?
5个回答

8
您可以使用简单的取模运算和除法。
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)
});

2

这里有一种不同的方法,它将数字转换为字符串,然后将其转换为字符数组,再将字符转换回数字,最后使用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()


1
一个略微不同的变体 [333, 444, 555].map(function(d) { return d.toString().split('').reduce(function(acc, c) { return acc + parseInt(c,10); }, 0) }) ,用来说明 d.toString().split('') 作为获取字符串中字母列表的另一种替代方法。 - widged
@widged 你说得对... 我有点过于习惯 ES6 的扩展运算符了,它可以让你使用 [...'String'] 来获取 ['S','t','r','i','n','g'] 或者 Array.from。因此我假设只要用 Array.prototype.slice.call 替换所有地方就可以了。 - Sebastian Simon

1
现在,随着ES6的优势,您可以在map中简单地展开数组中的每个值,然后使用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));


1
var nums = [333, 444, 555]; 

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


//output [9, 12, 15]

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


0

如果你想生成一个由每个数字的总和组成的数组,你可以结合使用.map()/.reduce()方法。 .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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接