Переупорядочение массивов

Скажите, у меня есть массив, который похож на это:

var playlist = [
    {artist:"Herbie Hancock", title:"Thrust"},
    {artist:"Lalo Schifrin", title:"Shifting Gears"},
    {artist:"Faze-O", title:"Riding High"}
];

Как я могу переместить элемент в другое положение?

Я хочу переместиться, например, {artist:"Lalo Schifrin", title:"Shifting Gears"} в конец.

Я пытался использовать соединение встык, как это:

var tmp = playlist.splice(2,1);
playlist.splice(2,0,tmp);

Но это не работает.

89
задан Emile Bergeron 15 December 2016 в 19:48
поделиться

4 ответа

Синтаксис Array.splice :

yourArray.splice(index, howmany, element1, /*.....,*/ elementX);

Где:

  • index - это позиция в массиве, с которой вы хотите начать удаление элементов из
  • сколько сколько элементов вы хотите удалить из index
  • element1, ..., elementX - это элементы, которые вы хотите вставить из позиции index .

Это означает, что splice () может использоваться для удаления элементов, добавления элементов или замены элементов в массиве, в зависимости от переданных вами аргументов.

Обратите внимание, что он возвращает массив удаленных элементов.

Что-то хорошее и общее будет:

Array.prototype.move = function (from, to) {
  this.splice(to, 0, this.splice(from, 1)[0]);
};

Тогда просто используйте:

var ar = [1,2,3,4,5];
ar.move(0,3);
alert(ar) // 2,3,4,1,5

Diagram:

Algorithm diagram

204
ответ дан 24 November 2019 в 07:11
поделиться

Если вы знаете индексы, вы можете легко поменять местами элементы, с помощью простой функции вроде этой:

function swapElement(array, indexA, indexB) {
  var tmp = array[indexA];
  array[indexA] = array[indexB];
  array[indexB] = tmp;
}

swapElement(playlist, 1, 2);
// [{"artist":"Herbie Hancock","title":"Thrust"},
//  {"artist":"Faze-O","title":"Riding High"},
//  {"artist":"Lalo Schifrin","title":"Shifting Gears"}]

Индексы массива - это просто свойства объекта массива, поэтому вы можете поменять местами его значения.

19
ответ дан 24 November 2019 в 07:11
поделиться

Вы всегда можете использовать метод сортировки, если не знаете, где находится запись в данный момент:

playlist.sort(function (a, b) {
    return a.artist == "Lalo Schifrin" 
               ? 1    // Move it down the list
               : 0;   // Keep it the same
});
3
ответ дан 24 November 2019 в 07:11
поделиться

Измените 2 на 1 в качестве первого параметра в вызове монтажа при удалении элемента:

var tmp = playlist.splice(1, 1);
playlist.splice(2, 0, tmp[0]);
6
ответ дан 24 November 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: