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);