簡體   English   中英

如何將數組拆分為給定大小的塊? (JavaScript)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM