javascript - 返回数组中最大的数字之和

标签 javascript arrays

是否有一个好的方法来循环它以使其返回数字总和最大的数字?因此,记录的应该是“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/

相关文章:

javascript - jquery ajax - 为什么 .load() 无法加载自身页面?

javascript - 获取空白网页并显示 'event.returnValue is deprecated' 警告

javascript - 如何使用 Mac OS 和 Firefox 触发 cmd+h?

arrays - Ruby Hash Values 是数组,需要转换成字符串

php - 如何在 PHP 中读取这个数组

python - 圆阵旋转的高效算法-python

javascript - 从五个项目数组中找出可能组合的总数

javascript - 循环遍历数组并将值分配给变量

javascript - "setting object properties"如何在派生对象上工作(以及这与设置基元有何不同)

javascript - rails : jquery autocomplete in a search form