Je me demande quel est le moyen le plus rapide en JavaScript pour déplacer un élément du début d'un Array
à la fin. Par exemple, si nous avons
[8,1,2,3,4,5,6,7]
Et nous voulons: [1,2,3,4,5,6,7,8]
Je veux déplacer le premier élément à la fin. Je pensais à basculer l'élément 0 avec l'élément 1, après cela basculer l'élément 1 avec l'élément 2 et ainsi de suite jusqu'à ce que le 8 soit au et (en gros, comment bullesort fonctionne). Je me demandais s'il y avait un moyen plus rapide d'amener le premier élément à la fin.
J'utiliserai de petits tableaux (environ 10 éléments), et je veux éviter shift()
car c'est assez lent.
C'est ce que j'ai maintenant sur chrome c'est 45% plus rapide que shift normal + Push: http://jsperf.com/shift-myfunc
Les tableaux contiendront des objets pour un jeu.
var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.shift()); // results in [1, 2, 3, 4, 5, 6, 7, 8]
var ary = [8,1,2,3,4,5,6,7];
console.log("Before: " + ary);
ary.Push(ary.shift()); // results in [1, 2, 3, 4, 5, 6, 7, 8]
console.log("After: " + ary);
var a = ["a","b","c"];
var b = a.shift();
a.Push(b);
ou
var b = a.shift();
a[a.length] = b;
Qu'est-ce qui va être le plus rapide? Cela dépend vraiment du contenu du tableau et de quel navigateur/version!
Maintenant, comment supprimer le premier index?
shift()
splice()
slice()
Maintenant, quelles sont les façons d'ajouter au dernier index?
Push()
array[array.length]
concat()
- ne va même pas essayerAutres moyens
JSPerf:
http://jsperf.com/test-swapping-of-first-to-last
Quel est vraiment le plus rapide?
Ce qui est le plus rapide dépend vraiment de ce que vous faites avec la baie. Si vous utilisez simplement le premier index, il sera plus rapide de faire en sorte que votre code lise un index et ne décale pas les valeurs. Si vous utilisez tous les index, il suffit de boucler et de traverser et lorsque vous arrivez à la fin, recommencez à zéro. Compteurs de base.
Utilisez l'épissure pour obtenir le premier élément
var first = array.splice(0,1);
Poussez ensuite pour faire si le dernier.
Étant donné que la valeur de retour de la méthode d'épissage est un tableau, vous devez dire
array.Push(first[0]);
Exemple de travail ici: JSFIDDLE
Juste au cas où vous voudriez mettre un élément à la fin:
var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.splice(position, 1)[0]);
pour position
simplement envelopper cela dans un forEach.
Et voici une douce version ES6
let arr = [1,2,3,4,5,6]
const [first, ...rest] = arr;
arr = [...rest,first]
var a = [1,2,3,4,5,6,7,8];
var b= a[7];
var c = a.slice(1, 8);
c.Push(b);
Edit: Il est probablement préférable de simplement déplacer, comme epascarello l'a fait dans sa réponse .
une saveur de plus
var arr = [0, 1, 2];
arr = arr.concat(arr.shift())
concat peut ajouter non seulement un élément mais un autre tableau à la fin ou au début
Mise à jour des tableaux déplaçant les éléments d'un extrême à l'autre:
const array = ['First', 'Second', 'Third', 'Fourth'];
const next = [...array]
next.Push(next.shift())
console.log(next); // [ 'Second', 'Third', 'Fourth', 'First' ]
const prev = [...array]
prev.unshift(prev.pop())
console.log(prev); // [ 'Fourth', 'First', 'Second', 'Third' ]