"Под каждым делом, но в конечном итоге он удаляет товар по отдельности в корзину, а не как группа из трех."
Группа из трех илитри отдельных предмета не важны, главное, чтобы они были удалены.Ситуации, такие как клиент, имеющий менее 3 предметов продажи или вообще не имеющий и / или не в том же порядке, должны быть рассмотрены.Переключатель, действующий в качестве фильтра, - плохая идея, вам нужно избегать жесткого кодирования динамических данных (я предполагаю, что товары в корзине будут отличаться для каждого покупателя и что в конечном итоге также изменятся и предметы продажи).
План демонстрации
- список Массив объектов, представляющих содержимое корзины покупателя.
- продажа Массив объектов, представляющихтовары в настоящее время в продаже.
- Конвертируйте оба массива в Карты.
var discount = convertToMap(list, "name")
var customer = convertToMap(sale, "name")
- Сравнить скидка и клиент Сопоставление друг с другом и объединение каждой соответствующей пары ключ / значение из скидка to customer .
- Результатом является Карта с этим шаблоном:
`[["Muffin Mix - Raisin Bran", {"name":"Muffin Mix - Raisin Bran","price":5.85,"qty":1,"total":2.92,"saved":2.93}], ...]`
Демо
// Sale Items - Note the "total" and "saved" values
let sale = [
{"name":"Flavoring - Orange","price":4.57,"qty":1,"total":2.00,"saved":2.57},
{"name":"Muffin Mix - Raisin Bran","price":5.85,"qty":1,"total":2.92,"saved":2.93},
{"name":"Pepsi - Diet, 355 Ml","price":3.63,"qty":1,"total":1.81,"saved":1.82}
];
// Cart Items - This represents the customer's cart
let cart = [
{"name":"Plastic Arrow Stir Stick","price":0.75,"qty":1,"total":0.75,"saved":0},
{"name":"Veal - Round, Eye Of","price":22.91,"qty":1,"total":22.91,"saved":0},
{"name":"Calypso - Pineapple Passion","price":8.69,"qty":1,"total":8.69,"saved":0},
{"name":"Sloe Gin - Mcguinness","price":33.27,"qty":1,"total":33.27,"saved":0},{"name":"Wine - Sake","price":28.47,"qty":1,"total":28.47,"saved":0},
{"name":"Dried Figs","price":1.78,"qty":1,"total":1.78,"saved":0},
{"name":"Pepsi - Diet, 355 Ml","price":3.63,"qty":1,"total":3.63,"saved":0},
{"name":"Olives - Moroccan Dried","price":15.17,"qty":1,"total":15.17,"saved":0},
{"name":"Muffin Mix - Raisin Bran","price":5.85,"qty":1,"total":5.85,"saved":0}
];
/*
@ convertToMap(array, key)
@ Params: array [Array of Objects]..(ex. list)
@ key [String]..............(ex. "name")
@ Converts an Array of Objects to a MAP
@ iNPUT: [{key,...}, {key,...}, {key,...}], key
@ ~~~~~~~~~~~~~~===~~~~~~~~~~~~~~~
@ OUTPUT: [[key, {key,...}], [key, {key,...}], [key, {key,...}]]
*/
const convertToMap = (array, key) => {return new Map(array.map(item => [item[key], item]));};
// Get a Map of sale
const discount = convertToMap(sale, 'name');
// Get a Map of cart
const customer = convertToMap(cart, 'name');
/*
@ mergeMaps(mapA, mapB)
@ Params: mapA [Map]...smaller Map...(ex. [[...], [...]])
@ mapB [Map]...larger Map....(ex. [[...], [...]])
@ Compares MapA to MapB
@ If any matches by value occur,
@ replace MapB key/value with MapA key/value
*/
const mergeMaps = (mapA, mapB) => {
for (let key of mapB.keys()) {
if (mapA.has(key)) {
mapB.set(key, mapA.get(key));
}
}
return mapB;
};
let shoppingA = mergeMaps(discount, customer);
console.log(shoppingA.get("Sloe Gin - Mcguinness"));
console.log("~~~~~~~~~~~~~~~~~~~~~-====-~~~~~~~~~~~~~~~~~~~~~");
// [OPTION] Convert new Map to a 2D Array
let shoppingB = Array.from(mergeMaps(discount, customer));
console.log(shoppingB);