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
})
}
})
})
我感觉都不需要用到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);