2010-10-25 18 views
31

Eventuali duplicati:
Javascript swap array elementsScambiare due elementi di un array JavaScript

Ho un array di come questo:

this.myArray = [0,1,2,3,4,5,6,7,8,9]; 

Ora quello che voglio fare è, posizioni di scambio di due oggetti danno le loro posizioni. Per esempio, voglio scambiare punto 4 (che è 3) con punto 8 (che è 7) che dovrebbe sfociare in:

this.myArray = [0,1,2,7,4,5,6,3,8,9]; 

Come posso raggiungere questo obiettivo?

+2

Duplicate (con alcune soluzioni oltraggiose per il tuo divertimento) - http://stackoverflow.com/questions/872310/javascript-swap-array-elements –

risposta

50

Basta riassegnare gli elementi, la creazione di una variabile intermedia per salvare il primo che over-scrittura:

var swapArrayElements = function(arr, indexA, indexB) { 
    var temp = arr[indexA]; 
    arr[indexA] = arr[indexB]; 
    arr[indexB] = temp; 
}; 
// You would use this like: swapArrayElements(myArray, 3, 7); 

Se si vuole fare questo più facile da usare, si può anche aggiungere questo al prototipo Array integrato (come suggerisce kennebec @); tuttavia, essere consapevoli che questo è generalmente un cattivo modello per evitare (dal momento che questo può creare problemi quando più librerie diverse hanno idee diverse su ciò che appartiene nei tipi built):

Array.prototype.swap = function(indexA, indexB) { 
    swapArrayElements(this, indexA, indexB); 
}; 
// You would use this like myArray.swap(3, 7); 

Si noti che questa soluzione è molto più efficiente rispetto all'alternativa usando splice(). (O (1) vs O (n)).

+9

O (1) che di seguito non è – Nick

5

Si può semplicemente utilizzare una variabile temporanea per spostare le cose, ad esempio:

var temp = this.myArray[3]; 
this.myArray[3] = this.myArray[7]; 
this.myArray[7] = temp; 

You can test it out here, o sotto forma di funzione:

Array.prototype.swap = function(a, b) { 
    var temp = this[a]; 
    this[a] = this[b]; 
    this[b] = temp; 
}; 

Poi si era appena lo chiamano in questo modo:

this.myArray.swap(3, 7); 

You can test that version here.

75

Il valore restituito da una giuntura è l'elemento (s) che era removed-

bisogno di una variabile temporanea

Array.prototype.swapItems = function(a, b){ 
    this[a] = this.splice(b, 1, this[a])[0]; 
    return this; 
} 

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 

alert(arr.swapItems(3, 7)); 

valore restituito: (Array)

0,1,2,7,4,5,6,3,8,9 
+1

Bello !! Come mai nessun altro ha votato questa risposta. – zachzurn

+0

La chiave per comprendere questa soluzione è che splice() può avere elementi aggiuntivi dopo l'inizio e deleteCount che verranno inseriti nella posizione di splicing. Solo un difetto: splice() restituisce un array, quindi per ottenere l'unico elemento (e solo) da quell'array, si dovrebbe dire: 'this [a] = this.splice (b, 1, this [a]) [0]; ' – trembl

+13

Considera anche questo, la giunzione è O (n), http://stackoverflow.com/questions/11514308/big-o-of-javascript-arrays – Nick

Problemi correlati