如何查找存储在数组中的字符串中的数字总和

时间:2016-08-03 23:09:41

标签: javascript arrays loops

我已经弄清楚如何使用单个字符串计算数字的值,例如..

var sum = "13-2-10-7-3".split('-').reduce(function(x, y) {
    return parseInt(x)+ parseInt(y);
}); // Value of 35

我有兴趣找到其数字总和为最大数字的信用卡号码。如果多个具有相同的最大数字总和,我们希望列表中的最后一个具有该总和。

以下是信用卡号码的示例数组:

['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'] 

在上面的示例数组中,数字分别加起来为49,81,81和64。由于有两个具有相同的总和,因此该函数应返回具有该总和的最后一个,在本例中为'4252-278893-7978'

我一直试图弄清楚如何将其应用于数组数组。

  1. 包含函数中所需的所有变量和代码。
  2. 让该函数使用一个参数,该参数将是一组信用卡号字符串。
  3. 确定每个信用卡号码的位数总和。
  4. 确定哪个信用卡号码的最后一位数字。
  5. 使用return语句以“原始格式”
  6. 返回所需的卡号

    洞察力将非常感激

4 个答案:

答案 0 :(得分:2)

您可以编写一个maxBy函数,它将您的函数作为确定数组中最大元素的参数。这样您就可以轻松地调整代码,而无需太多工作。

var cards = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'];

function maxBy(arr, func) {
  return arr.reduce(function(max, val) {
    return func(val) >= func(max) ? val : max;
  }, arr[0]);
}

function sumCC(card) {
  return card.split(/-|/).reduce(function(sum, val) {
    return sum + parseInt(val, 10);
  }, 0);
}

console.log(maxBy(cards, sumCC));

这是一个有用的实用功能。 Lodash实用程序库还提供_.maxBy

答案 1 :(得分:1)

循环显示信用卡号码并检查总和是否存储最大值并继续循环并存储最大信用卡号并将其返回:

function max_credit_sum(arr){
  max = -1
  credit_card = ''
  for(ele of arr){
    numbers = ele.replace(/-/g, '').split('')
    sum = 0
    for(num of numbers){
      sum += parseInt(num)
    }
    if(sum >= max){
      credit_card = ele
      max = sum
    }
  }
 return credit_card
}

// Test
arr = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'] 
maximum = max_credit_sum(arr)

答案 2 :(得分:0)

它不是最高效的,但它简单快捷

gpu:0

答案 3 :(得分:0)

您可能会获得这样的最大金额的卡片;

var cards = ['4916-2600-1804-0530', '4779-252888-3972', '4252-278893-7978', '4556-4242-9283-2260'],
 cardSums = cards.map(c => c.split("-").reduce((p,c) => +p + +c)),
  maxCard = cards[cardSums.indexOf(Math.max(...cardSums))];
console.log(maxCard);