是否有一个好的方法来循环它以使其返回数字总和最大的数字?因此,记录的应该是“333”,而不是“9”。
var myArr = [ '111' , '222' , '333' ];
var result = myArr.map(function(text){
return text.match(/\d/g).reduce(function(x, y){
return +y + x;
}, 0);
});
最佳答案
如果所需的输出只是源数组中的单个数字,则不需要 .map()
函数。您可以使用.reduce()
来比较每个数字的数字之和,但返回原始数字:
const sumDigits = n => (String(n).match(/\d/g)||[]).reduce((x,y) => +x + +y, 0);
const numWithLargestSum = arr =>
arr.reduce((a, c) => sumDigits(a||0) >= sumDigits(c) ? a : c, null);
const myArr = [ '111' , '222' , '333' ];
console.log(numWithLargestSum(myArr)); // 333
console.log(numWithLargestSum([])); // null
console.log(numWithLargestSum(['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'])); // 4779-252888-3972
console.log(numWithLargestSum(['123', '111', '321', ''])); // 123
注释:
- 如果多个数字具有相同的总和,以上将返回第一个。如果您想返回最后,只需将
>=
比较更改为>
。 - 如果数组为空,它将返回
null
。我将null
作为.reduce()
操作的初始值传递,然后使用||0
将其转换为>0
,但对于空数组,该位不会运行。 - 我使用了问题中的
.match(/\d/g)
,因为在评论中您谈论的是4779-252888-3972
这样的输入字符串,但如果一个项目没有数字.match()
将返回null
所以我使用||[]
来防止这种情况为了在我的sumDigits()
函数中对结果调用.reduce()
。比添加if
更容易。
关于javascript - 返回数组中最大的数字之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450908/