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

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'
            }
        ],
    }
];

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

 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)

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
}, [])

 

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); // 最终输出

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)