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
相关产品推荐
相关产品推荐

