2016-03-18 3 views
-1

Ich arbeite an einer Codierung Herausforderung und glaube, ich bin nah an einer Lösung, aber bin derzeit fest und würde gerne einige Erkenntnisse. Ich versuche, eine Funktion zu erstellen, die eine Reihe von Zahlen (Kreditkartennummern einschließlich Bindestriche) aufnehmen kann, die Summe jeder Nummer vergleichen und die höchste Kreditkartennummer zurückgeben kann. Die Lösung muss Javascript verwenden. Die Funktion gibt gerade "undefiniert" zurück. Vielen Dank im Voraus für jede Hilfe!Vergleiche Summen von Werten innerhalb Array, um zu bestimmen, welche die größte ist

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

Hallo zurückzukehren ouside der []

  • sein Am Ende müssen Sie - Willkommen in stackoverflow.com. Wenn Sie eine Antwort erhalten möchten, müssen Sie eine spezifische Frage stellen. Gibt es etwas, das nicht funktioniert? –

  • Antwort

    0

    Sie haben einige Fehler, siehe Beispiel Arbeits

    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

    das macht Sinn, danke! –

    0

    Nun, wollen Sie nicht creditArray[highIndex] statt creditArray[i] zurückzukehren?

    0

    Es gibt zwei Probleme.

    1. Die for (a = 0; a < creditArray[i.length]; a++) { sollte for (a = 0; a < creditArray[i].length; a++) { sein. Die .length sollte creditArray[highIndex]
    +0

    vielen Dank für die Hilfe Gaby! –

    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

    danke ludovic, ich bin ein Anfänger, also ist das ein bisschen über meinem Kopf, aber ich werde mehr Zeit mit dieser Version verbringen, um herauszufinden, wie das funktioniert. –

    +0

    Dies ist falsch, da die Kartennummer als Ganzzahl behandelt wird. Das OP möchte die Ziffern der Karte summieren und anhand dieser Summe vergleichen –

    Verwandte Themen