2016-04-28 24 views
0

Warum funktioniert das nicht? ps. Ich möchte keine andere Variable verwenden, damit es funktioniert, und ich möchte keine eingebauten Funktionen verwenden, sondern nur fragen, warum das nicht funktioniert.Warum funktioniert diese Umkehrfunktion nicht?

function reverse(arr){ 
    for(var i =0; i< arr.length; i++){ 
    arr.push(arr[arr.length-i]); 
    } 
    return arr; 
} 
+3

sein wird Wissen Sie, was 'arr.push (arr [arr.length-i]);' tut – Tushar

+0

@AlexanderMac Wenn Sie die Frage und sehen Code, Sie müssen diesen Kommentar nicht geben. –

+0

@Alexander Mac Ich möchte umkehren, ohne eine andere Variable zu verwenden, ist das möglich? –

Antwort

1

Es gibt viele Fehler in Ihrem Code.

  • Wenn Sie anfangen, arr.push(arr[arr.length-i]); zu drücken, erhöht sich die Array-Länge, dadurch erhalten Sie keine Konsistenz in den Daten.
  • Dies geht in eine Endlosschleife, wie jedes Mal, arr ist vor seiner Länge.
  • Es ist besser, eine andere Variable zu verwenden und umzukehren, oder Sie können die integrierte reverse()-Funktion verwenden. Es ist nichts falsch daran, eine andere Variable zu haben und temporäre Inhalte hinzuzufügen.

    Lösungen:

    eine temporäre Array:

    function reverse(arr) { 
        var final = []; 
        for (var i = arr.length - 1; i >= 0; i--) { 
         final.push(arr[i]); 
        } 
        return final; 
    } 
    

    built-in function (Array.prototype.reverse()) Verwendung:

    function reverse(arr) { 
        return arr.reverse(); 
    } 
    

    Mit wenigen temporären Variablen:

    a = [5,4,3,2,1]; 
     
    function reverse(arr) { 
     
        var i = 0, j = arr.length - 1; 
     
        for (i = 0; i < j; i++, j--) { 
     
        var temp = arr[i]; 
     
        arr[i] = arr[j]; 
     
        arr[j] = temp; 
     
        } 
     
        return arr; 
     
    } 
     
    
     
    console.log(reverse(a));

    +0

    @RobertLock Willkommen.Darf ich wissen, aus welchem ​​Grund Sie eine temporäre Variable "nicht" verwenden müssen? –

    +0

    Ich lese Eloquent JS und es gibt eine Übung, die so geht: "Die erste, reverseArray, nimmt ein Array als Argument und erzeugt ein neues Array, das die gleichen Elemente in umgekehrter Reihenfolge hat. Die zweite, reverseArrayInPlace, tut was Umgekehrte Methode tut: es ändert das Array als Argument gegeben, um seine Elemente umzukehren.Weder kann die Standard-Reverse-Methode.Oder –

    +0

    so, im Grunde muss ich zwei Funktionen schreiben, und ich kann immer noch nicht schreiben die zweite –

    0

    Ich will keine andere Variable verwenden, damit es funktioniert, und ich will nicht gebaut verwenden in Funktionen

    Sie können nicht.


    Verwenden temporäre Array für Ergebnis

    function reverse(arr) { 
        var res = [] 
        for (var i = arr.length - 1; i > -1; i--) { 
         res.push(arr[i]); 
        } 
        return res; 
    } 
    
    0

    Sie werden aus dem Speicher laufen. Was Sie tun, ist das Hinzufügen des ursprünglich letzten Elements dieses Arrays bis zum Ende des Arrays. Jedes Mal, wenn Sie arr.push(...) anrufen, erhöhen Sie arr.length um eins. Ihre for-Schleife wird nie fertig sein, weil i nie weniger als arr.length

    Verwandte Themen