Как поменять порядок элементов внутри массива, не затронув порядок других?
Есть массив с объектами:
const currentArr = [{id: 1, name: "User№1"}, {id: 2, name: "User№2"}, {id: 3, name: "User№3"}, {id: 4, name: "User№4"}];
Задача написать функцию которая принимает в себя два индекса(старого элемента, и нового местоположения в массиве);
К примеру moving(0, 3);
Результат который хочу увидеть: [{id: 4, name: "User№4"}, {id: 2, name: "User№2"}, {id: 3, name: "User№3"},{id: 1, name: "User№1"}]; - При этом важно, чтоб все остальные элементы оставались в таком же порядке как и были (Это Важно!)
Подскажите пож. как это можно реализовать? Все никак не получается, именно чтоб другие элементы оставались в таком же порядке. Потому что если я делаю splice() и потом push, порядок уже меняетсяс(
Ответы (2 шт):
Автор решения: Rudi
→ Ссылка
Можно что-то такое сделать..
const m = [{id: 1, name: "User№1"}, {id: 2, name: "User№2"}, {id: 3, name: "User№3"}, {id: 4, name: "User№4"}];
function move(oldIndex, newIndex, arr) {
if(oldIndex < 0 || newIndex < 0 || oldIndex > arr.length || newIndex > arr.length) return false
let res = [];
for(var i = 0; i < arr.length; i++){
if(i == newIndex) {
res[oldIndex] = arr[newIndex];
res[newIndex] = arr[oldIndex];
continue
}
res[i] = arr[i]
}
return res
}
console.log(move(0, 3, m))
Автор решения: vikttur_Stop_RU_war_in_UA
→ Ссылка
function moving(arr, index1, index2) {
minIndex = Math.max(0, Math.min(index1, index2));
maxIndex = Math.min(arr.length-1, Math.max(index1, index2));
const maxElement = arr.splice(maxIndex, 1, arr[minIndex]);
arr.splice(minIndex, 1, ...maxElement);
return arr;
}
console.table(moving(currentArr, 10, -5));