位置交换
/**
* @param {any[]} arr - 原始数组。
* @param {number} fromIndex - 当前元素所在位置索引。
* @param {number} toIndex - 移动到交换的位置索引。
* @returns {any[]} 返回修改后的数组。
*/
const swapItem = function(arr, fromIndex, toIndex) {
arr[toIndex] = arr.splice(fromIndex, 1, arr[toIndex])[0];
return arr;
};
上移
// arr: ['a', 'b', 'c', 'd'], 将b上移,moveUpItem(arr, 1), 结果:['b', 'a', 'c', 'd']
const moveUpItem = function(arr, index) {
if(index === 0) {
return;
}
swapItem(arr, index, index - 1);
};
下移
// arr: ['a', 'b', 'c', 'd'], 将b下移,moveDownItem(arr, 1), 结果:['a', 'c', 'b', 'd']
const moveDownItem = function(arr, index) {
if(index === arr.length - 1) {
return;
}
swapItem(arr, index, index + 1);
};
移动至首位
// arr: ['a', 'b', 'c', 'd'], 将c移至首位,moveItemToFirst(arr, 2), 结果:['c', 'a', 'b', 'd']
const moveItemToFirst = function(arr, fromIndex) {
let item;
for (let i = 0; i < arr.length; i++) {
item = arr[i];
if (i === fromIndex) {
arr.splice(i, 1);
break;
}
}
arr.unshift(item);
}
排序移动
// arr: ['a', 'b', 'c', 'd'], 将b移至末位,moveItem(arr, 1, 3), 结果:['a', 'c', 'd', 'b']
const moveItem = function(arr, fromIndex, toIndex) {
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (i == fromIndex) {
arr.splice(i, 1);
arr.splice(toIndex, 0, item);
break;
}
}
return arr;
}