js数组怎么置顶和复原元素呢?
在javascript数组可以把某个元素置顶,置顶的意思就是变成数组第0位,然后我也要可以复原回原来的位置 比如[1,2,3,4] 置顶[3]后变成[3,1,2,4], 置顶4后变成[4,3,1,2] ,然后复原[4]变成[3,1,2,4]然后复原[3]变成 [1,2,3,4]怎么实现呢?
注意⚠️:复原的元素可以是任意的置顶元素,例如上面例子先复原[3]变成[4,1,2,3],再复原[4]变成[1,2,3,4]
回复
1个回答

test
2024-06-28
可以考虑用一个栈来维护位置信息,在置顶操作时,记录下当前置顶元素的原始位置,压入栈中,在复位时,栈顶就是当前置顶元素的原始位置。
代码如下:
let arr = [1,2,3,4];
let positions = []; // 存储置顶元素初始位置的栈
function moveToTop(value) {
let index = arr.indexOf(value);
if (index > -1) {
positions.push(index);
arr.splice(index, 1);
arr.unshift(value);
}
}
function revertToOriginal() {
if (positions.length === 0) return;
let originalIndex = positions.pop();
let index = arr.indexOf(arr[0]);
arr.splice(index, 1);
arr.splice(originalIndex, 0, arr[0]);
}
// Test
console.log('初始数组:', arr); // [ 1, 2, 3, 4 ]
moveToTop(3);
console.log('置顶3:', arr); // [ 3, 1, 2, 4 ]
moveToTop(4);
console.log('置顶4:', arr); // [ 4, 3, 1, 2 ]
revertToOriginal();
console.log('复位4:', arr); // [ 3, 1, 2, 4 ]
revertToOriginal();
console.log('复位3:', arr); // [ 1, 2, 3, 4 ]
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容