如何对数组元素执行splice操作并按规则插入,实现基于ID的数组重排?
基于ID实现数组元素移动/重排方案
首先将原逻辑的固定下标替换为按ID动态查找下标,适配数组元素位置不固定的场景:
- 核心使用JS原生
Array.findIndex()方法定位元素位置,无需引入额外依赖 - 增加元素存在性判断,避免数组中不存在对应ID时抛出异常
移动单个元素实现代码
const data = response.data // 替换为你需要移动的元素的实际ID const moveItemId = 'xxx' // 查找元素在源数组的下标 const sourceIndex = data.ssps_with_scated.findIndex(item => item.id === moveItemId) if (sourceIndex !== -1) { // 从源数组中截取出目标元素 const movedItem = data.ssps_with_scated.splice(sourceIndex, 1)[0] // 替换为你要插入到目标数组对应位置的参考元素ID,比如要插到ID为refId的元素前面 const referenceId = 'yyy' const targetIndex = data.ps_with_ed.findIndex(item => item.id === referenceId) // 未找到参考位置时默认插入到数组末尾,可根据业务调整规则 const insertPos = targetIndex !== -1 ? targetIndex : data.ps_with_ed.length // 插入到目标数组 data.ps_with_ed.splice(insertPos, 0, movedItem) }
全数组按指定ID顺序重排实现
如果需要将整个数组按预设的ID顺序整体排序,可使用Array.sort()实现:
// 按业务需求定义好ID的顺序列表 const expectIdOrder = ['id1', 'id3', 'id5', 'id2', 'id4'] // 对数组执行排序 data.ps_with_ed.sort((a, b) => { return expectIdOrder.indexOf(a.id) - expectIdOrder.indexOf(b.id) })
内容的提问来源于stack exchange,提问作者T dhanunjay
相关产品推荐
相关产品推荐

