js for循环push新数组的key值相同问题.

发布于 2022-09-12 22:19:12 字数 918 浏览 11 评论 0

const data = [{ a: '123', b: 'qwe', c: 'abc' },
              { a: '123', b: 'nwe', c: 'bac' },
              { a: '123', b: 'abr', c: 'bnm' },
              { a: '333', b: 'hhh', c: 'rrr' },
              { a: '333', b: 'vvv', c: 'rrr' },
              { a: '444', b: 'yyy', c: 'eee' }]

现在我需要的效果是,a对应新data的name,b对应新data的age,c对应新data的food,关键是如果有重复的a值就在多出的第一个加上'(1)',重复第二个就加'(2)',以此类推,如果没有重复则不动

理想效果↓

         const data = [{ name: '123', age: 'qwe', food: 'abc' },
                      { name: '123(1)', age: 'nwe', food: 'bac' },
                      { name: '123(2)', age: 'abr', food: 'bnm' },
                      { name: '333(1)', age: 'hhh', food: 'rrr' },
                      { name: '333(2)', age: 'vvv', food: 'rrr' },
                      { name: '444', age: 'yyy', food: 'eee' }]

我该怎么操作才能达到效果呢~..

感谢各位大神大哥的指导,先感谢你们的回答,小弟感激不尽,还请轻喷!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

温柔戏命师 2022-09-19 22:19:12

image

console.log(demo(data))

function demo (list) {
  let name, map = {}
  return data.reduce(function (group, item) {
    map[item.a] = map[item.a] == null ? 0 : map[item.a] + 1
    name = map[item.a] ? item.a + '('+ map[item.a] +')' : item.a
    group.push({
      name: name,
      age: item.b,
      food: item.c
    })
    return group
  }, [])
}
随梦而飞# 2022-09-19 22:19:12

用一个 map 计数,遍历原数据的时候,根据计数决定要不要给 a 加后缀就行了。

把人绕傻吧 2022-09-19 22:19:12
let names = new Map()
let newData = data.map(({a,b:age,c:food})=>{
    let n = names.get(a)
    let name = a + (n ? `(${n++})` : ''); 
    names.set(a,n || 1)
    return {name,age,food}
})
console.log(newData)

不考虑原数组中name本来存在 '111(1)' 这种值就可以这么简单转一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文