2017-02-17 5 views
1

Wenn ich ein Array wie [1,2,3,4], und ich möchte es duplizieren und umzukehren, wie bekomme ich es [1,2,3,4,4,3,2,1] zurückgeben?Javascript erweitern Array, so dass es dupliziert und umgekehrt

Array.prototype.duplicateAndReverse = function() { 
    const initial = this; 
    const reversed = initial.reverse(); 
    return initial.concat(reversed); 
} 

Was mache ich hier falsch? Es gibt [4,3,2,1,4,3,2,1]

+3

Siehe [Dokumentation] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse): "Die reverse() -Methode kehrt ein Array ** um place **. Das erste Array-Element wird das letzte und das letzte Array-Element wird das erste. " Ihr Aufruf zum Reverse ändert "initial". – Amy

+1

Im Gegensatz zu '.replace()', wo das ursprüngliche Element gleich bleibt, wird '.reverse()' tatsächlich das Objekt ändern, auf dem Sie es verwenden. Also ändert 'const reversed = initial.reverse()' tatsächlich 'initial' UND Einstellung 'reversed', also sind beide Arrays jetzt umgekehrt. – Santi

+0

danke @Amy. Jetzt habe ich meinen Fehler – user1354934

Antwort

2

Try this:

Array.prototype.duplicateAndReverse = function() { 
 
    const initial = this; 
 
    const reversed = initial.slice().reverse(); 
 
    return initial.concat(reversed); 
 
} 
 

 
var myArray = [1,2,3,4]; 
 
alert(myArray.duplicateAndReverse());

Ihr Code initial sowie Einstellung reversed zu umkehrt das Ergebnis, also haben Sie zwei identische (umgekehrte) Arrays. Verwenden Sie stattdessen .slice(), um das ursprüngliche Array zu duplizieren, und kehren Sie das stattdessen um.

2

var arr = [1,2,3,4]; 
 

 
for(var len = arr.length; len; len--) 
 
    arr.push(arr[len - 1]); 
 
    
 
console.log(arr);

ich dich nicht mit Zohan an Array.prototype empfehlen, aber hier ist das, was Sie wollen:

Array.prototype.duplicateAndReverse = function() { 
 
    let res = this.slice(); // create another copy so the original array will stay intact 
 
    for(var len = res.length; len; len--) 
 
    res.push(res[len - 1]); 
 
    return res; 
 
} 
 

 
let arr = [1, 2, 3, 4]; 
 
console.log(arr.duplicateAndReverse());

2

Das Problem war, dass man versucht, rückgängig das anfängliche Array an Ort und Stelle.
Verwenden Sie die folgende optimierte Lösung:

Array.prototype.duplicateAndReverse = function() { 
 
    return this.concat(this.slice().reverse()); 
 
} 
 

 
console.log([1,2,3,4].duplicateAndReverse());

Um das ursprüngliche Array zu behalten und seine umgekehrte Kopie Array.prototype.slice() Funktion kombiniert mit Array.prototype.reverse() Funktion

1

Oriental Lösung, hihi verwenden erstellen.

var arr = [1,2,3,4]; 
 
var newArr = []; 
 

 
arr.forEach((_,i) => newArr.unshift(arr[arr.length-i-1]) && newArr.push(arr[arr.length-i-1])) 
 

 
console.log(newArr);

+0

das ist cool!Warum hast du '_' verwendet? – user1354934

+1

Ich habe' _' verwendet, um jedem zu sagen, der sich meinen Code ansieht, dass ich nicht das erste Argument der 'forEach()' -Funktion benutzt habe, was 'element' ist. Das zweite Argument ist der Index - "i" dieses "Elements". Das 'i' ist alles was ich hier brauche :) –

+0

O ok. Also, wenn du das nicht benutzt - was wird passieren? – user1354934

2

Das ist Ihr Problem, weil reverse() auch das ursprüngliche Array arr Reverse

var arr = [1,2,3,4] 
var dup = arr.reverse() 
console.log(arr) // => [4, 3, 2, 1] 
console.log(dup) // => [4, 3, 2, 1] 

Sie benötigen die Original-Array erste

var dup = arr.slice().reverse() 

Und das klonen n Sie können die 2 Arrays contrahieren, um das Ergebnis zu erhalten. Glückliche Kodierung!

Verwandte Themen