Подтвердить что ты не робот

Самый быстрый способ перемещения первого элемента в конец массива

Мне интересно, какой самый быстрый способ в JavaScript перемещать элемент с начала Array до конца. Например, если мы имеем

[8,1,2,3,4,5,6,7]

И мы хотим: [1,2,3,4,5,6,7,8]

Я хочу переместить первый элемент в конец. Я думал о переключении элемента 0 с элементом 1, после этого переключающего элемента 1 с элементом 2 и так далее до тех пор, пока 8 не будет в и (в основном, как работает bubblesort). Мне было интересно, есть ли более быстрый способ довести первый элемент до конца.

Я буду использовать небольшие массивы (около 10 элементов), и я хочу избежать shift(), так как это довольно медленно.

Это то, что у меня сейчас на хроме, на 45% быстрее, чем обычный сдвиг + push: http://jsperf.com/shift-myfunc

Массивы будут иметь в них объекты для игры.

4b9b3361

Ответ 1

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

Пример 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);

Ответ 2

Используйте shift и push

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

или

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

Изменить По обновленному вопросу

Что будет самым быстрым? Действительно зависит от содержимого массива и того, что браузер/версия!

Каковы способы удаления первого индекса?

  • shift()
  • splice()
  • slice()

Каковы способы добавления к последнему индексу?

  • push()
  • array[array.length]
  • concat() - даже не попытаться

Другие способы

  • for loop - сделать новый массив [будет ужасным на больших массивах]

JSPerf:

http://jsperf.com/test-swapping-of-first-to-last


Что действительно самое быстрое?

Что самое быстрое на самом деле зависит от того, что вы делаете с массивом. Если вы просто используете первый индекс, это будет быстрее всего, чтобы ваш код считывал индекс и не менял значения. Если вы используете все индексы, а не только цикл и до конца, и когда вы дойдете до конца, начните с нуля. Основные счетчики.

Ответ 3

На всякий случай вы хотите поместить любой элемент в конец:

var ary = [8,1,2,3,4,5,6,7];
ary.push(ary.splice(position, 1)[0]);

для position просто оберните это в forEach.

Ответ 4

Используйте соединение, чтобы получить первый элемент

var first = array.splice(0,1);

Затем нажмите, чтобы сделать, если последний.

Поскольку возвращаемое значение метода сращивания является массивом, вы должны сказать

array.push(first[0]);

Рабочий пример здесь: JSFIDDLE

Ответ 5

А вот и сладкая версия ES6

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

const [first, ...rest] = arr;
arr = [...rest,first]

Ответ 6

var a = [1,2,3,4,5,6,7,8];
var b= a[7];
var c = a.slice(1, 8);
c.push(b);

Изменить: Возможно, лучше просто сдвинуть, например, epascarello в его ответ.

Ответ 7

еще один аромат

var arr = [0, 1, 2];
arr = arr.concat(arr.shift())

concat может добавить не только элемент, но и другой массив в конец или начало.

Ответ 8

Обновление массивов движущихся элементов из одной крайности в другую:

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