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

移除指定ID对象后重命名对象ID属性,如何仅用一个箭头函数实现?

问题分析与解决方案

首先,咱们得搞清楚你当前写法的问题所在:filter方法里的index是原数组的索引,不是过滤后新数组的索引。当你跳过id=5的元素时,原数组里id=6的元素原本索引是2,直接把这个值赋值给id,自然会得到{id: 2, val: "345345"},这和你想要的连续编号不符。而且filter的回调应该返回布尔值来决定是否保留元素,你原来返回element或null的写法虽然能运行,但不符合filter的设计逻辑,容易出问题。

满足需求的单一箭头函数解决方案

要在一个操作里完成“过滤指定id元素 + 重新编号剩余元素id”,用Array.reduce()是最适合的,它可以同时实现过滤和累加构建新数组的操作,完全符合你“仅用一个箭头函数”的要求:

let table = [{id:4,val:"21321"},{id:5,val:"435345"},{id:6,val:"345345"}];

const result = table.reduce((acc, element) => {
  if (element.id !== 5) {
    // 用累加器的长度作为新id,自动实现连续编号
    acc.push({ id: acc.length, val: element.val });
  }
  return acc;
}, []);

console.log(result); // 输出:[{id: 0,val: "21321"},{id: 1,val: "345345"}]

为什么这个方案可行?

  • reduce的第一个参数是回调函数,第二个参数[]是累加器acc的初始值(也就是我们最终要生成的新数组)。
  • 每次遍历原数组元素时,如果元素的id不是5,就把它的val和当前累加器的长度(也就是新数组的当前元素个数,正好是下一个元素的索引)作为新的id,推入累加器。
  • 整个过程只需要一次数组遍历,用一个回调函数就完成了过滤和重新编号的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:16:07