比较数组内的值的总和以确定哪个是最大的

时间:2016-03-18 20:58:24

标签: javascript arrays

我正在编写一个编码挑战并相信我接近一个解决方案,但我目前卡住了,并希望得到一些见解。我正在尝试构建一个可以采用一组数字(信用卡号码包括破折号)的功能,比较每个数字的总和,并返回最高的信用卡号。解决方案必须使用Javascript。该函数当前正在返回" undefined"。在此先感谢您的帮助!

function highestCredit(creditArray){
  var highSum = 0;
  var highIndex = 0;
  var sum= 0;
  //loop through each value in the array
  for (i = 0; i < creditArray.length; i++) {
    //loop that disregards dashes and adds up the sum of a single credit card number
    for (a = 0; a < creditArray[i.length]; a++) {
      if(isNaN(creditArray[i].charAt(a)) === false){
          sum += parseInt(creditArray[i].charAt(a));
      }
    }
    //compare current sum to highest sum, update the index if there is a new high number
    if (sum >= highSum) {
      highSum = sum;
      sum = 0;
      highIndex = i;
    }
  }
  return creditArray[i];
}

console.log(highestCredit(['4916‐2600‐1804‐0530', '4779‐252888‐3972', '4252‐278893‐7978' ,'4556‐ 4242‐9283‐2260']));

4 个答案:

答案 0 :(得分:0)

嗯,你不想归还creditArray[highIndex]而不是creditArray[i]吗?

答案 1 :(得分:0)

您有一些错误,请参阅工作示例

&#13;
&#13;
  function highestCredit(creditArray) {
    var highSum = 0;
    var highIndex = 0;
    var sum = 0;
    for (i = 0; i < creditArray.length; i++) {
        for (a = 0; a < creditArray[i].length; a++) { // error with length
            if (isNaN(creditArray[i].charAt(a)) === false) {
                sum += parseInt(creditArray[i].charAt(a), 10);
            }
        }
        if (sum >= highSum) {
            highSum = sum;
            sum = 0;
            highIndex = i;
        }
    }
    return creditArray[highIndex]; // should return 'highIndex', not 'i'
}

document.write(highestCredit(['4916‐2600‐1804‐0530', '4779‐252888‐3972', '4252‐278893‐7978' ,'4556‐ 4242‐9283‐2260']));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

有两个问题。

  1. for (a = 0; a < creditArray[i.length]; a++) {应为for (a = 0; a < creditArray[i].length; a++) {.length应该在[]
  2. 之后
  3. 最后,您需要返回creditArray[highIndex]

答案 3 :(得分:0)

var creditCards = ["00-00-1-00", "00-00-2-00", "00-00-3-00", "00-00-4-00"];


function cardIdToObject(cardId) {
//remove the dashes
    var cardIDAsString = cardId.replace(/\D/g, '');
  //tansform the number as an array of character
  var cardIDAsArray = cardIDAsString.split('');
  // sum all the characters individually ..
  var cardIDAsInteger = cardIDAsArray.reduce(function(p,c){return p + parseInt(c) },0);
  //create an object containing the original id and the calculated sum for later comparison
  var cardAsObject={};
  //store the original id
  cardAsObject.id=cardId;
  //store the calculated sum of individual characters of the card number
  cardAsObject.sum=cardIDAsInteger;
  // returns object
  return cardAsObject;
}

function biggestCard(p, c, i) {
  return p.sum > c.sum ? p : c;
};

console.log("The biggest card id is :" + creditCards.map(cardIdToObject).reduce(biggestCard).id);
相关问题