You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中删除数组对象并同步更新后续对象id属性

解决删除数组对象后更新后续id的问题

首先,你原代码用delete的问题在于:它只会把数组对应位置的元素设为undefined,不会改变数组长度,也不会自动调整后续元素的id。要实现需求,得换个方式处理:

实现步骤

  1. 找到要删除的元素在数组中的索引
  2. 用splice移除该元素(这个方法会直接修改原数组,删除指定位置的元素并调整数组长度)
  3. 从被删除元素的索引位置开始,遍历后续所有元素,把它们的id减1

完整代码示例

const flights = [
    { id: 00, to: "New York", from: "Barcelona", cost: 700, scale: false },
    { id: 01, to: "Los Angeles", from: "Madrid", cost: 1100, scale: true },
    { id: 02, to: "Paris", from: "Barcelona", cost: 210, scale: false },
    { id: 03, to: "Roma", from: "Barcelona", cost: 150, scale: false },
    { id: 04, to: "London", from: "Madrid", cost: 200, scale: false },
    { id: 05, to: "Madrid", from: "Barcelona", cost: 90, scale: false },
    { id: 06, to: "Tokyo", from: "Madrid", cost: 1500, scale: true },
    { id: 07, to: "Shangai", from: "Barcelona", cost: 800, scale: true },
    { id: 08, to: "Sydney", from: "Barcelona", cost: 150, scale: true },
    { id: 09, to: "Tel-Aviv", from: "Madrid", cost: 150, scale: false },
];

let flightIdToDelete = 4; // 注意不要写04,会被解析为八进制数,直接写十进制4即可

// 1. 找到要删除元素的索引
const deleteIndex = flights.findIndex(flight => flight.id === flightIdToDelete);

if (deleteIndex !== -1) {
    // 2. 删除该元素
    flights.splice(deleteIndex, 1);
    
    // 3. 更新后续元素的id
    for (let i = deleteIndex; i < flights.length; i++) {
        flights[i].id -= 1;
    }
}

console.log(flights);

补充说明

  • 不要写flightIdToDelete = 04,以0开头的数字在JS里会被解析为八进制数,直接写十进制的4即可
  • 如果数组中id和索引不对应(比如之前执行过删除操作),findIndex依然能准确找到目标元素的位置,不影响后续逻辑
  • splice(deleteIndex, 1)的含义是:从deleteIndex位置开始,删除1个元素

内容的提问来源于stack exchange,提问作者claramarsango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:50:26