用 splice 实现元素置顶或置底的核心是“先删后插”:先用 splice(index, 1) 删除目标元素,再根据位置用 splice(0, 0, item) 置顶或 splice(list.length, 0, item) 置底;需先用 indexOf 查索引,判断存在后再操作,重复元素需倒序遍历处理。

用 splice 实现元素置顶或置底,核心是“先删后插”:先用 splice 删除目标元素,再根据目标位置(索引 0 或末尾)重新插入。
置顶:移到数组开头
把指定元素移到最前面,需两步:找到它当前索引 → 删除它 → 在索引 0 处插入。
- 用
indexOf获取目标元素首次出现的位置(注意:若元素重复,只处理第一个) - 若存在,先用
splice(index, 1)删除;再用splice(0, 0, item)插入开头 - 若原数组为空或未找到,不操作
let list = ['a', 'b', 'c', 'd'];
let target = 'c';
let idx = list.indexOf(target);
if (idx > -1) {
list.splice(idx, 1); // 删除 'c'
list.splice(0, 0, target); // 插入开头
}
// 结果:['c', 'a', 'b', 'd']
置底:移到数组末尾
移到最后只需删除后推入(push 更直观),但统一用 splice 可保持操作风格一致。
- 同样先查索引并删除
- 再用
splice(list.length, 0, item)插入末尾(等价于push) - 注意:删除后数组长度减 1,但插入时用
list.length是安全的(即新长度)
let list = ['a', 'b', 'c', 'd'];
let target = 'b';
let idx = list.indexOf(target);
if (idx > -1) {
list.splice(idx, 1);
list.splice(list.length, 0, target); // 插入末尾
}
// 结果:['a', 'c', 'd', 'b']
处理重复元素(可选增强)
默认 indexOf 只匹配首个。如需置顶/置底所有同值元素,改用循环 + 倒序遍历删除,避免索引偏移。
- 从后往前遍历(
i = list.length - 1; i >= 0; i--) - 遇到匹配项就
splice(i, 1)删除,并缓存该元素 - 遍历完再批量插入(置顶用
unshift,置底用push,或多次splice)
注意事项与边界情况
splice 会直接修改原数组,如需不可变更新,先 slice() 拷贝再操作。
- 目标元素不存在时,
indexOf返回-1,务必判断再执行删除 - 删除后插入时,第二个参数为
0表示不删除,只插入 - 置顶时若目标已在开头(
idx === 0),可跳过操作提升效率










