Échange de deux éléments dans un javascript array

Duplication possible:
Éléments de tableau de swap Javascript

J'ai un tableau comme ceci:

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

Maintenant, ce que je veux faire, c'est que les positions de swap de deux éléments donnent leurs positions. Par exemple, je souhaite échanger l'élément 4 (qui est 3) avec l'élément 8 (qui est 7) ​​qui devrait aboutir à:

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

Comment puis-je atteindre cet objectif?

Il suffit de réaffecter les éléments, en créant une variable intermédiaire pour enregistrer le premier sur-écriture:

 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); 

Si vous souhaitez que cela soit plus facile à utiliser, vous pouvez même l'ajouter au prototype Array intégré (comme le suggère kennebec @); Cependant, soyez conscient que ce n'est généralement pas un mauvais modèle à éviter (car cela peut créer des problèmes lorsque plusieurs bibliothèques différentes ont différentes idées de ce qui appartient aux types intégrés):

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

Notez que cette solution est significativement plus efficace que l'alternative en utilisant splice (). (O (1) vs O (n)).

La valeur de retour d'une épissure est l'élément (s) qui a été supprimé (s)

Pas besoin d'une variable temporaire

 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)); 

Valeur renvoyée: (Array)

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

Vous pouvez simplement utiliser une variable temporaire pour déplacer les choses, par exemple:

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

Vous pouvez le tester ici ou sous forme de fonction:

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

Ensuite, vous l'appelez comme suit:

 this.myArray.swap(3, 7); 

Vous pouvez tester cette version ici .