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 .