js实现json数组根据相同字段,合并出新的数据?

把相同batch合并,并生成对应的positionList 数组
原始数组:

    const list = [
      {
        positionId: '1001',
        positionName: 'B-b-b-101',
        batch: '1',
        num: 5,
      },
      {
        positionId: '1002',
        positionName: 'B-b-b-102',
        batch: '2',
        num: 3,
      },
      {
        positionId: '1004',
        positionName: 'B-b-b-104',
        batch: '1',
        num: 1,
      },
      {
        positionId: '1004',
        positionName: 'B-b-b-105',
        batch: '2',
        num: 3,
      },
    ]

期望数组:

  const list = [
      {
        positionId: '1001',
        positionName: 'B-b-b-101',
        batch: '1',
        num: 5,
        positionList: [
          {
            positionId: '1001',
            positionName: 'B-b-b-101',
            num: 5,
          },
          {
            positionId: '1004',
            positionName: 'B-b-b-104',
            num: 1,
          },
        ],
      },
      {
        positionId: '1002',
        positionName: 'B-b-b-102',
        batch: '2',
        num: 3,
        positionList: [
          {
            positionId: '1002',
            positionName: 'B-b-b-102',
            num: 2,
          },
        ],
      },
      {
        positionId: '1005',
        positionName: 'B-b-b-105',
        batch: '2',
        num: 3,
        positionList: [
          {
            positionId: '1005',
            positionName: 'B-b-b-105',
            num: 3,
          },
        ],
      },
    ]
阅读 1.2k
1 个回答
    const list = [
      {
        positionId: '1001',
        positionName: 'B-b-b-101',
        batch: '1',
        num: 5,
      },
      {
        positionId: '1002',
        positionName: 'B-b-b-102',
        batch: '2',
        num: 3,
      },
      {
        positionId: '1004',
        positionName: 'B-b-b-104',
        batch: '1',
        num: 1,
      },
      {
        positionId: '1004',
        positionName: 'B-b-b-105',
        batch: '2',
        num: 3,
      },
    ]
let obj ={}
let newList = list.reduce((item, next) => {
    obj[next.batch] ? '' : obj[next.batch] = true && item.push(next)
    return item
}, []).map(m=>{
    m.positionList = JSON.parse(JSON.stringify(list.filter(f => f.batch == m.batch)))
    return m
})
console.log(newList)//格式化好的数据
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏