Compare and combine arrays
by amindunited
JavaScript
const deals = [{
id: "basic",
"volume": 3,
"pricePerUnit": "322.99"
},{
id: "medium",
"volume": 2,
"pricePerUnit": "666.99"
}
];
const cartFunctions = (inCart) => {
let groupedCart = myCart.reduce((accumulated, current) => {
const accLen = accumulated.length;
const currentId = current.id;
const accObjectModel = {
"id": current.id,
items: [current]
}
if (accLen <= 0) {
return [accObjectModel]
}
// if the current item is the same kind as the previous 'set'
else if (accumulated[accLen-1].id === currentId) {
accumulated[accLen-1].items.push(current);
}
else {
// Create a new entry for the new id
accumulated.push({
"id": current.id,
items: [current]
});
}
return accumulated;
}, []);
console.log("groupedCart", groupedCart);
const applyDeal = (deal, items) => {
console.log('applyDeal', deal, items);
}
// Go through deals and apply each to to the relevant cart group
deals.forEach((deal) => {
const items = groupedCart.filter((grouping) => { return grouping.id === deal.id })
applyDeal(deal, items);
});
const finalCart = groupedCart.reduce((acc, curr) => {
return acc.concat(curr.items);
}, []);
console.log('finalCart', finalCart);
}
const myCart = [
{ uId: 0, id: "basic", price: "1" },
{ uId: 1, id: "basic", price: "1" },
{ uId: 2, id: "basic", price: "1" },
{ uId: 3, id: "basic", price: "1" },
{ uId: 4, id: "medium", price: "2" }
];
cartFunctions(myCart);