两数组对象对比,如果相同就放到A数组对象内,


      const Alist = [{ name: 'aa', }, { name: 'bb', }, { name: 'cc' },]
      const Blist = [{ name: 'aa', id: 1 }, { name: 'bb', id: 2 }, { name: 'bb', id: 3 }, { name: 'cc', id: 4 }, { name: 'aa', id: 5 },]

怎么把上面2组数组对比后 得到下面的新数组

      const AlistNew = [{ name: 'aa', list: [{ id: 1 }, { id: 5 }] }, { name: 'bb', list: [{ id: 2 }, { id: 3 }] }, { name: 'cc', list: [{ id: 4 }] },]

const Alist = [
        { name: 'aa', }, 
        { name: 'bb', }, 
        { name: 'cc' },
    ]
    const Blist = [
        { name: 'aa', id: 1 }, 
        { name: 'bb', id: 2 }, 
        { name: 'bb', id: 3 }, 
        { name: 'cc', id: 4 }, 
        { name: 'aa', id: 5 }
    ]
     Alist.forEach((v,i)=>{
         Blist.forEach((vv,ii)=>{
             if(v.name==vv.name){
                 if(!v.list){
                     v.list=[]
                 }
                v.list.push({
                    id:vv.id
                })
             }
         })
     })

img

我感觉都不需要用到Alist,直接将Blist中name相同的放一起就可以

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>

    <body>
    </body>
    <script type="text/javascript">
        const Alist = [{ name: 'aa', }, { name: 'bb', }, { name: 'cc' },]
        const Blist = [{ name: 'aa', id: 1 }, { name: 'bb', id: 2 }, { name: 'bb', id: 3 }, { name: 'cc', id: 4 }, { name: 'aa', id: 5 }]

        const getArray = (arr) => {
            let map = new Map()
            for (let item of arr) {
                const temp = item.name
                if (!map.has(temp)) {
                    map.set(temp, {
                        name: item.name,
                        list: [
                            { id: item.id }
                        ]
                    })
                } else {
                    let newTemp = map.get(temp)
                    newTemp.list.push({
                        id: item.id
                    })
                    map.set(temp, newTemp)
                }
            }
            return [...map.values()]
        }
        console.log('getArray', getArray(Blist))

    </script>

</html>

 const Alist = [
            { name: 'aa', },
            { name: 'bb', },
            { name: 'cc' },]
        const Blist = [
            { name: 'aa', id: 1 },
            { name: 'bb', id: 2 },
            { name: 'bb', id: 3 },
            { name: 'cc', id: 4 },
            { name: 'aa', id: 5 },]
        Alist.forEach(item => {
            item.list = []
            Blist.forEach((item1) => {
                if (item1.name == item.name) {
                    if (item1.id) {
                        item.list.push(item1.id)
                    }
                }
            })
        })
        console.log(Alist);