2016-03-18 11 views
-1

私はコーディングの課題に取り組んでおり、解決策に近いと信じていますが、現在固執しており、洞察に感謝しています。私は数字のセット(ダッシュを含むクレジットカード番号)を取ることができ、各番号の合計を比較し、最高のクレジットカード番号を返すことができる機能を構築しようとしています。ソリューションはJavascriptを使用する必要があります。関数は現在 "未定義"を返しています。助けをあらかじめありがとう!配列内の値の合計を比較して最大値を調べる

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'])); 
+0

こんにちはを返す必要が終わり[]

  • ousideでなければなりません。あなたは特定の質問をする必要がある答えを得たいと思っています。働いていないものがありますか? –

  • 答えて

    0

    、2つの問題があります。

    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']));

    +1

    これは意味があります、ありがとう! –

    0

    さて、あなたはcreditArray[highIndex]代わりのcreditArray[i]を返すようにしたくないですか?あなたはいくつかのエラーがあった

    0

    作業例を参照してください。

    1. は、for (a = 0; a < creditArray[i].length; a++) {である必要があります。 stackoverflow.comへようこそ - .lengthあなたはcreditArray[highIndex]
    +0

    ガービーに助けてくれてありがとう! –

    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); 
    
    +0

    ありがとうludovic、私は初心者ですので、これは私の頭の上に少しですが、私はこのバージョンともう少し時間をかけて、この仕組みを理解するでしょう。 –

    +0

    これは、カード番号を整数として扱うので、間違っています。 OPは、カードの桁を合計し、この合計に基づいて比較したい –