ES6中如何为对象数组的重复id添加后缀实现差异化(不删除重复项)
实现代码
方案1:生成新数组(不修改原数组)
const formatArr = (arr) => { // 用Map记录每个id的出现次数 const idCounter = new Map(); return arr.map(item => { // 取当前id的计数,不存在则默认0 const count = idCounter.get(item.id) || 0; // 更新计数 idCounter.set(item.id, count + 1); // 解构原对象,替换id后返回新对象 return { ...item, id: `${item.id}_${count}` }; }); }; // 调用示例 const processedArr = formatArr(arr);
方案2:直接修改原数组
const idCounter = new Map(); arr.forEach(item => { const count = idCounter.get(item.id) || 0; idCounter.set(item.id, count + 1); item.id = `${item.id}_${count}`; });
逻辑说明
- 借助
Map结构存储每个id的累计出现次数,只需遍历数组1次即可完成处理,时间复杂度为O(n),性能表现优异 - 相同id的后缀从0开始依次递增,完全匹配预期输出效果
内容的提问来源于stack exchange,提问作者Arjun Kumar
相关产品推荐
相关产品推荐

