Я пытаюсь изменить позицию индекса элемента в массиве, но я не могу понять способ.Как я могу изменить положение определенного элемента в массиве?
{
"items": [
1,
3,
2
]
}
Я пытаюсь изменить позицию индекса элемента в массиве, но я не могу понять способ.Как я могу изменить положение определенного элемента в массиве?
{
"items": [
1,
3,
2
]
}
Вы можете использовать splice
для перемещения элемента в массиве:
var arr = [
1,
3,
2
];
var oldIndex = 2,
newIndex = 1;
arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);
Это делает [1, 2, 3]
Внутренний стык удаляет и возвращает элемент, а внешний - вставляет его обратно.
Просто для удовольствия я определил общую функцию, способную перемещать кусок, а не просто элемент, и делает вычисление индекса:
Object.defineProperty(Array.prototype, "move", {
value:function(oldIndex, newIndex, nbElements){
this.splice.apply(
this, [newIndex-nbElements*(newIndex>oldIndex), 0].concat(this.splice(oldIndex, nbElements))
);
}
});
var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9];
arr.move(5, 3, 4);
console.log('1:', arr) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
var arr = [0, 1, 2, 7, 8, 3, 4, 5, 6, 9];
arr.move(3, 9, 2);
console.log('2:', arr); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
var arr = [0, 1, 2, 4, 5, 3, 6, 7];
arr.move(5, 3, 1);
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7]
var arr = [0, 3, 1, 2, 4, 5, 6, 7];
arr.move(1, 4, 1);
console.log('3:', arr); // [0, 1, 2, 3, 4, 5, 6, 7]
Как это работает? Почему существует '' 'сращивание''' в' '' сращивание'''? –
@ MichaelWilson2013 Я отредактировал для объяснения –
Мне очень нравится общая функция! : P –
Если вы хотите, чтобы отсортировать их в порядке Unicode (где цифры становятся строками), вы можете использовать функцию sort().
items.sort();
Если у вас есть заказ, вам необходимо предоставить функцию сортировки функции сортировки.
function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
и использовать его как это:
items.sort(compare(a, b));
Я хотел был бы иметь возможность изменить индекс деталей, не сортировать их через их значение. –
@ MichaelWilson2013 Я не уверен, что понял: вам нужно что-то вроде 'sort()', но это работает по индексу, а не по значению? – rpadovani
Какой индекс, который вы хотите изменение??? – Manwal
Каков ожидаемый результат? – Tushar
Я хотел бы, чтобы массив был изменен на '' '" items ": [1, 2, 3]' '' –