js数组怎么置顶和复原元素呢?

作者站长头像
站长
· 阅读数 23

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