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

JavaScript如何为map生成的嵌套对象数组添加全局唯一递增id

实现方案

要实现跨层级全局唯一递增id,不要依赖各层map方法自带的局部索引——这类索引只在当前遍历的数组内生效,跨层级/跨数组成员遍历的时候会重复计数,无法满足全局连续的要求。
最直接的做法是在遍历逻辑外部维护一个独立的自增计数器,不管是外层父对象还是内层嵌套的子对象,每次给对象分配id时取当前计数器的值,再将计数器+1,就能保证所有层级的id连续且不重复。

可直接运行的代码

// 初始化全局id计数器,初始值设为1匹配示例中id从1开始的规则
let autoIncrementId = 1;

const response = initialResponse.data.Resurs.map((item) => {
  return {
    KomRes: item.Kom,
    // 给当前父级对象分配id,计数器自增
    id: autoIncrementId++,
    levels: [
      // 遍历NumList生成子项,逐个分配id
      ...item.NumList.map((numItem) => ({
        KomRes: numItem.Number,
        id: autoIncrementId++
      })),
      // 遍历SerList生成子项,逐个分配id
      ...item.SerList.map((serItem) => ({
        KomRes: "Serial: " + serItem.Ser,
        id: autoIncrementId++
      }))
    ]
  };
});

说明

  • 如果需要id从0开始计数,只需要把autoIncrementId的初始值改为0即可。
  • 这个方案不受嵌套层级、子项来源数组数量的影响,后续如果levels里还要新增其他来源的子项、或者继续嵌套更深层级的对象,只要在创建对象时取当前计数器值再自增,就能一直保持id全局唯一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:36:25