我有:
var nums = [333, 444, 555];
我希望你能将数字中的每个数字视为单独的数字并将它们相加。在这种情况下,总和应该是:
```html
我希望你能将数字中的每个数字视为单独的数字并将它们相加。在这种情况下,总和应该是:
```9 = 3 + 3 + 3
12 = 4 + 4 + 4
15 = 5 + 5 + 5
如何使用JavaScript实现这一目标?
我有:
var nums = [333, 444, 555];
我希望你能将数字中的每个数字视为单独的数字并将它们相加。在这种情况下,总和应该是:
```9 = 3 + 3 + 3
12 = 4 + 4 + 4
15 = 5 + 5 + 5
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()
。
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));
var nums = [333, 444, 555];
nums.map(number => [...String(number)].reduce((acc, num) => +num+acc , 0));
//output [9, 12, 15]
一元加运算符(+num)将字符串转换为整数。
如果你想生成一个由每个数字的总和组成的数组,你可以结合使用.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>
[333, 444, 555].map(function(d) { return d.toString().split('').reduce(function(acc, c) { return acc + parseInt(c,10); }, 0) })
,用来说明d.toString().split('')
作为获取字符串中字母列表的另一种替代方法。 - widged[...'String']
来获取['S','t','r','i','n','g']
或者Array.from
。因此我假设只要用Array.prototype.slice.call
替换所有地方就可以了。 - Sebastian Simon