JavaScript中删除数组对象并同步更新后续对象id属性
解决删除数组对象后更新后续id的问题
首先,你原代码用delete的问题在于:它只会把数组对应位置的元素设为undefined,不会改变数组长度,也不会自动调整后续元素的id。要实现需求,得换个方式处理:
实现步骤
- 找到要删除的元素在数组中的索引
- 用
splice移除该元素(这个方法会直接修改原数组,删除指定位置的元素并调整数组长度) - 从被删除元素的索引位置开始,遍历后续所有元素,把它们的
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
相关产品推荐
相关产品推荐

