web-dev-qa-db-fra.com

Manière la plus rapide de déplacer le premier élément à la fin d'un tableau

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.

43
Bosiwow
var ary = [8,1,2,3,4,5,6,7];
ary.Push(ary.shift());  // results in [1, 2, 3, 4, 5, 6, 7, 8] 

exemple jsFiddle

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

Utilisez shift et Push

var a = ["a","b","c"];
var b = a.shift();
a.Push(b);

ou

var b = a.shift();
a[a.length] = b;

Modifier en fonction de la question mise à jour

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 essayer

Autres moyens

  • for loop - make new array [va être horrible sur les grands tableaux]

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.

22
epascarello

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

7
Felipe Fonseca

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.

7
artdias90

Et voici une douce version ES6

let arr = [1,2,3,4,5,6]

const [first, ...rest] = arr;
arr = [...rest,first]
4
Nicholas
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 .

3
Jeroen Bollen

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

1
MohitGhodasara

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' ]
0
feralamillo