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]

阅读 2.9k
1 个回答
✓ 已被采纳

可以考虑用一个栈来维护位置信息,在置顶操作时,记录下当前置顶元素的原始位置,压入栈中,在复位时,栈顶就是当前置顶元素的原始位置。

代码如下:

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 ]
推荐问题
logo
Microsoft
子站问答
访问
宣传栏