2016-05-13 11 views
1

Arbeiten an einer Programmieraufgabe. Das Ziel besteht darin, eine Funktion zu erstellen, die "die Elemente eines Arrays (erstes Argument) ablegt, beginnend von vorne, bis das Prädikat (zweites Argument) wahr zurückgibt."Javascript - Übergeben Array [0] direkt vs Array [0] von i = 0 Array [i] fundamental anders innerhalb einer "Wenn" -Anweisung?

dropElements([1, 2, 3, 4], function(n) {return n > 5;}); 

function dropElements(arr, func) { 
    for (i = 0; i < arr.length-1; i++) { 
     if(func(arr[i])) { 
      break; 
     } 
     else { 
      arr.splice(i,1); 
      i--; 
     } 
    } 
    return arr; 
} 

kehrt [4], die die falsche Antwort ist

jedoch folgendes:

dropElements([1, 2, 3, 4], function(n) {return n > 5;}); 

function dropElements(arr, func) { 
    for (i = 0; i < arr.length; i++) { 
     if (func(arr[0])) { 
      break; 
     } 
     else { 
      arr.shift(); 
      i--; 
     } 
    } 
    return arr; 
} 

kehrt [], die die richtige Antwort ist

ich es von Hand alle heraus geschrieben und es sieht Wie es sich herausstellen sollte. Hat es etwas mit Zwang zu tun, das ich nicht verstehe?

+0

Was ist der Punkt der Erhöhung von "i", wenn Sie es immer in der "else" -Klausel dekrementieren? – Barmar

+0

Es macht wirklich keinen Sinn, eine 'for()' - Schleife in Ihrem Code zu verwenden, da 'i -' und 'i ++' sich gegenseitig rückgängig machen. Verwenden Sie einfach 'while (arr.length> 0)', um eine Schleife zu machen, bis die 'Pause' beendet ist oder Sie alles entfernt haben. – Barmar

Antwort

3

Ihre erste Schleife ist bis zu arr.length-1, während die zweite arr.length ist.

+0

Oh Mann! Vielen Dank! Ich dachte, es würde meinen Verstand verlieren, froh, dass es nur ein Syntaxfehler> Brandon

Verwandte Themen