首页 > 解决方案 > JavaScript 将数据分组到 2 层深的树视图中,最后一层是数组

问题描述

我有一个这样的 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'}]
    }
}

有没有一种简单的方法可以使用 lodash 或纯 JavaScript 或一些 NPM 包来做到这一点?这类似于这个问题:JavaScript group data into tree view 2 levels deep 但不同之处在于第三级是对象数组。

标签: javascripttypescriptsorting

解决方案


如果组有必要,您可以采用两个嵌套循环并创建新的对象/数组。

var data = [{ 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 }] }],
    result = data.reduce((r, { items }) => {
        items.forEach(({ itemCode, ...item }) => ['venueId', 'categoryCode']
            .reduce((o, k, i) => o[item[k]] = o[item[k]] || (i ? [] : {}), r)
            .push({ itemCode })
        );
        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读