У меня есть JSON объект, подобный этому:
[
{
"venueId": "10001",
"items": [
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1604",
"itemDescription": "Chef Instruction",
"categoryCode": "28",
"categoryDescription": "Food Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1381",
"itemDescription": "Meat Lovers Pizza",
"categoryCode": "48",
"categoryDescription": "25Fore - Pizza",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1027",
"itemDescription": "Sweet Spot Latte Mug",
"categoryCode": "23",
"categoryDescription": "Sweet Spot - Coffee/Tea",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "1413",
"itemDescription": "Garlic Bread",
"categoryCode": "51",
"categoryDescription": "25Fore - Starters",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "51",
"itemDescription": "Cascade Light Schooner",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "827",
"itemDescription": "Banrock Station Moscato 1L",
"categoryCode": "15",
"categoryDescription": "Wine White",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "1192",
"itemDescription": "Apple Slice",
"categoryCode": "31",
"categoryDescription": "Cafe Gold - Cake Selection",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "301",
"itemDescription": "Tooheys New 6pk",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "12",
"itemCode": "1036",
"itemDescription": "Cappuccino 16oz",
"categoryCode": "23",
"categoryDescription": "Sweet Spot - Coffee/Tea",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "12",
"itemCode": "61",
"itemDescription": "Great Northern Orig Pint",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "12",
"itemCode": "1232",
"itemDescription": "Asst. Cheese/Crackers 5pce",
"categoryCode": "33",
"categoryDescription": "Cafe Gold - Savoury Cabinet",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "863",
"itemDescription": "Lindemans Bin 85 P/Grigio 250",
"categoryCode": "15",
"categoryDescription": "Wine White",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "1600",
"itemDescription": "Lemon/Lime Bitters Glass",
"categoryCode": "7",
"categoryDescription": "Postmix",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "1143",
"itemDescription": "Chocolate",
"categoryCode": "28",
"categoryDescription": "Food Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "491",
"itemDescription": "Coke 330ml",
"categoryCode": "9",
"categoryDescription": "Soft Drink",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "335",
"itemDescription": "Postmix Glass",
"categoryCode": "7",
"categoryDescription": "Postmix",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "68",
"itemDescription": "Great Northern Super Crisp Po",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1286",
"itemDescription": "Mushroom Sauce",
"categoryCode": "36",
"categoryDescription": "Sauce Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1604",
"itemDescription": "Chef Instruction",
"categoryCode": "28",
"categoryDescription": "Food Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1831",
"itemDescription": "Ginger Beer Crows Nest 330ml",
"categoryCode": "9",
"categoryDescription": "Soft Drink",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1105",
"itemDescription": "Filo/Salad",
"categoryCode": "26",
"categoryDescription": "Sweet Spot - Savoury Cabinet",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1187",
"itemDescription": "Cafe Gold Pie 4 n 20",
"categoryCode": "30",
"categoryDescription": "Cafe Gold - Bar Menu",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1360",
"itemDescription": "Extra-Lamb Shank",
"categoryCode": "50",
"categoryDescription": "25Fore - Specials",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1296",
"itemDescription": "Side Chips",
"categoryCode": "36",
"categoryDescription": "Sauce Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1808",
"itemDescription": "Add Reef Topper ",
"categoryCode": "52",
"categoryDescription": "25Fore - Toppers",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1224",
"itemDescription": "Cafe Gold Long Black Mug",
"categoryCode": "32",
"categoryDescription": "Cafe Gold - Coffee/Tea",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "43",
"itemDescription": "Carlton Mid Pint",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "21",
"itemDescription": "Canadian Club/Dry Schooner",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "105",
"itemDescription": "XXXX Gold Schooner",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "1027",
"itemDescription": "Sweet Spot Latte Mug",
"categoryCode": "23",
"categoryDescription": "Sweet Spot - Coffee/Tea",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "301",
"itemDescription": "Tooheys New 6pk",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1639",
"itemDescription": "Upper Area",
"categoryCode": "87",
"categoryDescription": "Seating Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "335",
"itemDescription": "Postmix Glass",
"categoryCode": "7",
"categoryDescription": "Postmix",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "491",
"itemDescription": "Coke 330ml",
"categoryCode": "9",
"categoryDescription": "Soft Drink",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "43",
"itemDescription": "Carlton Mid Pint",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "1330",
"itemDescription": "200g Rump",
"categoryCode": "40",
"categoryDescription": "25Fore - From The Grill",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "17",
"itemCode": "1462",
"itemDescription": "Lactose Free Milk ",
"categoryCode": "54",
"categoryDescription": "Coffee Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1625",
"itemDescription": "Chicken",
"categoryCode": "28",
"categoryDescription": "Food Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "43",
"itemDescription": "Carlton Mid Pint",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "14",
"itemCode": "1725",
"itemDescription": "THURS T-Bone",
"categoryCode": "46",
"categoryDescription": "25Fore - Nightly Specials",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "1261",
"itemDescription": "Well Done",
"categoryCode": "35",
"categoryDescription": "Cooking Instructions",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "104",
"itemDescription": "XXXX Gold Pot",
"categoryCode": "4",
"categoryDescription": "Bulk Beer",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
},
{
"venueId": "10001",
"locationId": "15",
"itemCode": "1411",
"itemDescription": "Bread Roll",
"categoryCode": "51",
"categoryDescription": "25Fore - Starters",
"qty": 0,
"saleValue": 0,
"saleDatetime": "0001-01-01T00:00:00",
"timeToLive": 0
}
]
}
]
Я хочу превратить это в новый JSON объект, где все сгруппировано по id (это уже есть, но мне нужен номер для стать ключом), затем по categoryCode, чтобы результат выглядел примерно так:
{
'1': {
'555': [{ itemCode: '456'}, { itemCode: '457'}, { itemCode: '458'}]
}
}
Есть ли простой способ сделать это, используя loda sh или просто JavaScript или какой-то пакет NPM ? Это похоже на этот вопрос: JavaScript группирует данные в древовидном представлении глубиной 2 уровня , но разница в том, что третий уровень представляет собой массив объектов.