[英]How to split array into chunks of given size? (JavaScript)
我正在嘗試弄清楚如何讓這樣的 senario 工作:
MEAL DEAL: $4.99 - Total 3 items
Must includ 1 of each "DRINK, SANCKS, SANDWICH"
我有這個數組:
[
{ "CAT": "DRINKS", "QTY": 1, "PRICE": 1.2 },
{ "CAT": "DRINKS", "QTY": 1, "PRICE": 1.5 },
{ "CAT": "SANCKS", "QTY": 1, "PRICE": 2.5 },
{ "CAT": "SANCKS", "QTY": 1, "PRICE": 3.5 },
{ "CAT": "SANCKS", "QTY": 1, "PRICE": 1.5 },
{ "CAT": "SANDWICH", "QTY": 1, "PRICE": 5.3 },
{ "CAT": "SANDWICH", "QTY": 1, "PRICE": 3.0 }
]
基於上面的數組,我需要將它分成3 個元素的塊來創建餐點交易。
查看上面的數組(7 個元素),我們只能有 2x 餐食交易,其中 1 件“零食”還不能成為餐食交易的一部分,因為它缺少其他 2 個必要元素。
我已經嘗試過 forEach 循環,但它只適用於初始膳食交易,而不是 rest 它不起作用。
var PER_CATEGORY_SET ={}
var ITM = "";
MY_ARRAY.forEach(function (my_item){
var xx = MY_ARRAY.length;
while (xx > 0) {
if(ITM != my_item.CAT ){
ITM = my_item.CAT;
PER_CATEGORY_SET.push({'CAT':my_item.CAT,'QTY':my_item.QTY,'PRICE':my_item.PRICE});
MY_ARRAY.splice(0, 1);
}
xx--;
}
});
console.log(PER_CATEGORY_SET);
任何幫助將不勝感激,我已經嘗試搜索示例來幫助我自己解決問題(我不是在尋找復制和粘貼代碼)
您可以根據cat
對對象進行分組並獲得它的笛卡爾積。
var data = [{ CAT: "DRINKS", QTY: 1, PRICE: 1.2 }, { CAT: "DRINKS", QTY: 1, PRICE: 1.5 }, { CAT: "SANCKS", QTY: 1, PRICE: 2.5 }, { CAT: "SANCKS", QTY: 1, PRICE: 3.5 }, { CAT: "SANCKS", QTY: 1, PRICE: 1.5 }, { CAT: "SANDWICH", QTY: 1, PRICE: 5.3 }, { CAT: "SANDWICH", QTY: 1, PRICE: 3 }], result = Object.values(data.reduce((r, o) => ((r[o.CAT] = r[o.CAT] || []).push(o), r), {})).reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), [])); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
您可以根據CAT
值對每個 object 進行分組。 獲取哪些組的項目數量最少。 創建該長度的餐點並從每個組的每個索引中獲取項目
const input=[{CAT:"DRINKS",QTY:1,PRICE:1.2},{CAT:"DRINKS",QTY:1,PRICE:1.5},{CAT:"SANCKS",QTY:1,PRICE:2.5},{CAT:"SANCKS",QTY:1,PRICE:3.5},{CAT:"SANCKS",QTY:1,PRICE:1.5},{CAT:"SANDWICH",QTY:1,PRICE:5.3},{CAT:"SANDWICH",QTY:1,PRICE:3}]; const group = input.reduce((acc, o) => { acc[o.CAT] = acc[o.CAT] || []; acc[o.CAT].push(o); return acc; }, {}) const groupedArrays = Object.values(group), possibleMeals = Math.min(...groupedArrays.map(a => a.length)), meals = Array.from({ length: possibleMeals }, (_, i) => groupedArrays.map(g => g[i])) console.log(meals)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.