Скажите, у меня есть массив, который похож на это:
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);
Но это не работает.
Синтаксис Array.splice
:
yourArray.splice(index, howmany, element1, /*.....,*/ elementX);
Где:
Это означает, что 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:
Если вы знаете индексы, вы можете легко поменять местами элементы, с помощью простой функции вроде этой:
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"}]
Индексы массива - это просто свойства объекта массива, поэтому вы можете поменять местами его значения.
Вы всегда можете использовать метод сортировки, если не знаете, где находится запись в данный момент:
playlist.sort(function (a, b) {
return a.artist == "Lalo Schifrin"
? 1 // Move it down the list
: 0; // Keep it the same
});
Измените 2 на 1 в качестве первого параметра в вызове монтажа при удалении элемента:
var tmp = playlist.splice(1, 1);
playlist.splice(2, 0, tmp[0]);