//目标数据源
const goods=[{name:'巴啦啦',goods:'椰汁',price:15},
{name:'三只松鼠',goods:'瓜子',price:10},
{name:'哇哈哈',goods:'奶茶',price:11},
{name:'巴啦啦',goods:'苹果',price:15},
{name:'三只松鼠',goods:'坚果',price:10},
{name:'哇哈哈',goods:'荔枝',price:11},
{name:'巴啦啦',goods:'鲜榨',price:11},
{name:'三只松鼠',goods:'板栗',price:18},
{name:'哇哈哈',goods:'柠檬',price:5}]
//展示数据源
goodsList=[{
name:'巴啦啦'
data:[{goods:'椰汁',price:15},
{goods:'苹果',price:15},
{goods:'鲜榨',price:11}]
}]
第一种
var goodsList=[]
goods.forEach(el=>{
var obj={
data:[],
name:el.name
}
var dataobj={
goods:el.goods,
price:el.price
}
obj.data.push(dataobj)
goodsList.push(obj)
})
var cartData = []
var newObj = {}
goodsList.forEach((el,i)=>{
if(!newObj[el.name]){
cartData.push(el);
newObj[el.name] = true;
}else {
cartData.forEach(el=>{
if(el.name===goodsList[i].name){
el.data=el.data.concat(goodsList[i].data)
}
})
}
})
第二种
const goodsList = goods.reduce((acc,val)=>{
const {name,goods,price}= val
const dataItem ={ goods,price}
const nameIndex =acc.findIndex(val=>val.name===name)
nameIndex === -1 ?(
acc.push({
name,
data:[dataItem]
})
):(
acc[nameIndex].data.push(dataItem)
)
return acc
},[])
console.log(goodsList)
第三种
function fun(goods) {
let goodsList = []
for(let i = 0;i<goods.length;i++){
if(!isnameIngoodsList(goods[i].name, goodsList)){
// 初次添加数据
const good = {
name: goods[i].name,
data: [
{
goods: goods[i].goods,
price: goods[i].price
}
]
}
goodsList.push(good)
} else {
// 已经存在
const data = {
goods: goods[i].goods,
price: goods[i].price
}
const index = getIndex(goods[i].name, goodsList)
goodsList[index].data.push(data)
}
}
return goodsList
}
function isnameIngoodsList(name, goodsList) {
return goodsList.some((item) => {
return name === item.name
})
}
function getIndex(name, goodsList){
for(let i=0;i<goodsList.length;i++){
if(goodsList[i].name === name)
{
return i
}
}
return -1;
}
console.log(fun(goods))