一个数的和';用JavaScript替换数字

一个数的和';用JavaScript替换数字,javascript,sum,Javascript,Sum,我有: 我想把一个数字中的每一个数字当作一个单独的数字,然后把它们加在一起。在这种情况下,金额应为: var nums = [333, 444, 555]; 如何使用JavaScript实现这一点?您可以使用简单的模运算和除法 9 = 3 + 3 + 3 12 = 4 + 4 + 4 15 = 5 + 5 + 5 这里有一种不同的方法,将数字转换为字符串并将其转换为字符数组,然后将字符重新转换为数字,然后使用reduce将数字相加 var a = [111, 222, 333]; a.

我有:

我想把一个数字中的每一个数字当作一个单独的数字,然后把它们加在一起。在这种情况下,金额应为:

var nums = [333, 444, 555]; 

如何使用JavaScript实现这一点?

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

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

这里有一种不同的方法,将数字转换为字符串并将其转换为字符数组,然后将字符重新转换为数字,然后使用
reduce
将数字相加

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)
});

如果数组由较大的数字组成(这将溢出或变成
无穷大
),则可以在数组中使用字符串,并可以选择删除
.toString()

如果要生成由每个数字的和组成的数组,则可以组合/methods。
.map()
方法将基于返回值(在初始数组的每次迭代中生成)创建一个新数组

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

var输入=[333444555];
var sumOfDigits=input.map(函数(num){
返回num.toString().split(“”).reduce(函数(上一个,当前){
返回parseInt(prev,10)+parseInt(current,10);
}, 0);
});
//显示结果:
document.querySelector('pre').textContent=
'输入:'+JSON.stringify(输入,null,4)
+'\n\n输出:'+JSON.stringify(sumOfDigits,null,4)

现在,利用ES6的优势,您可以简单地在
映射中使用数组的每个值,然后使用
减少
进行操作:

var编号=[333444555];
const addDigits=nums=>nums.map(
num=>[…num.toString()].reduce((acc,act)=>acc+parseInt(act),0)
);
控制台日志(添加数字(数字))
//输出[9,12,15]


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

一个微小的变量
[333444555]。映射(函数(d){return d.toString().split(“”)。reduce(函数(acc,c){return acc+parseInt(c,10);},0)}
,以说明
d.toString().split(“”)
作为获取字符串中字母列表的另一种方法。@widged你说得对……我对ES6 spread运算符有点太习惯了,在这里你可以执行
[…'string']
来获取
['S','t','r','I','n','g']
Array.from
我认为只要使用
Array.prototype.slice.call
作为替换就可以了。
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]
var nums = [333, 444, 555]; 

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