escapeCn 2020-12-30 12:40 采纳率: 66.7%
浏览 1565
已采纳

js将一个数组对象中包含两个相同的key属性,整理成为一个新的数组


const list = [
    {
        no:'202012300001',
        exno:'yt',
        name:'订单1'
    },
    {
        no:'202012300001',
        exno:'yt',
        name:'订单2'
    },
    {
        no:'202012300002',
        exno:'yt',
        name:'订单3'
    },
    {
        no:'202012300002',
        exno:'yt',
        name:'订单4'
    }
];

//需要整理成为
const list = [
{
        name:'yt',
        no:'202012300001',
        list:[
            {
                name:'订单1'
            },
            {
                name:'订单2'
            }
        ],
    },
    {
        name:'yt',
        no:'202012300002',
        list:[
            {
                name:'订单4'
            },
            {
                name:'订单3'
            }
        ],
    }
];

这要怎么处理呢?求大神指点

  • 写回答

4条回答 默认 最新

  • bosaidongmomo 2020-12-30 13:43
    关注
     arr = [
            {
                no: '202012300001',
                exno: 'yt',
                name: '订单1'
            },
            {
                no: '202012300001',
                exno: 'yt',
                name: '订单2'
            },
            {
                no: '202012300002',
                exno: 'yt',
                name: '订单3'
            },
            {
                no: '202012300002',
                exno: 'yt',
                name: '订单4'
            }
        ];
        let newArr = []
        arr.forEach(({ no, exno }) => {
            if (newArr.filter((res) => { return res.no == no && res.exno == exno }).length == 0) {
                newArr.push({ no, exno, list: [] })
            }
        })
        newArr.forEach((item) => {
            let names = arr.filter((res) => { return res.no == item.no && res.exno == item.exno });
            names.forEach((res) => {
                item.list.push(res.name)
    
            })
        })
        console.log(newArr)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • Yirujet 2020-12-30 14:40
    关注

    const reduceList = (ary) => ary.reduce((c, n) => {
        c.find(e => e.no === n.no) ? c[c.findIndex(e => e.no === n.no)].list.push({
            name: n.name
        }) : c.push({
            name: n.exno,
            no: n.no,
            list: [{ name: n.name }]
        })
        return c
    }, [])

     

    评论
  • 没秃还能继续。 2020-12-30 13:57
    关注
    let tempArr = [];
          let endData = [];
          for (let i = 0; i < list.length; i++) {
            if (tempArr.indexOf(list[i].no) === -1) {
              endData.push({
                no: list[i].no,
                exno:list[i].exno,
                list: [list[i].name]
              });
              tempArr.push(list[i].no);
            } else {
              for (let j = 0; j < endData.length; j++) {
                if (endData[j].no == list[i].no) {
                  endData[j].list.push(list[i].name);
                  break;
                }
              }
            }
          }
          console.log(endData); // 最终输出
    评论
  • bosaidongmomo 2020-12-30 13:48
    关注
    arr = [
            {
                no: '202012300001',
                exno: 'yt',
                name: '订单1'
            },
            {
                no: '202012300001',
                exno: 'yt',
                name: '订单2'
            },
            {
                no: '202012300002',
                exno: 'yt',
                name: '订单3'
            },
            {
                no: '202012300002',
                exno: 'yt',
                name: '订单4'
            }
        ];
        let newArr = []
        arr.forEach(({ no, exno }) => {
            if (newArr.filter((res) => { return res.no == no && res.exno == exno }).length == 0) {
                newArr.push({ no, exno, list: [] })
            }
        })
        newArr.forEach((item) => {
            let names = arr.filter((res) => { return res.no == item.no && res.exno == item.exno });
            names.forEach((res) => {
                item.list.push({ name: res.name })
            })
            item.name = item.exno;
            delete item.exno;
        })
        console.log(newArr)
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 Java中import为灰色
  • ¥15 手机等其他智能设备被监听
  • ¥15 在win10 64位的vs打包MSI文件,放到win7 64位上安装成可执行exe文件后,点击程序不运行。
  • ¥50 大众点评用户浏览/消费记录爬虫
  • ¥15 求制作一个个人网页,
  • ¥15 寻涂色内存脚本作者有项目有市场有资源.却技术
  • ¥15 蓝桥杯c51单片机问题
  • ¥15 ajax跨域问题请求修改代码
  • ¥15 python matplotlib
  • ¥15 短信测压+语音,有偿,必须用Python