JavaScript 将数据分组到 TreeView 中,深度为 2 层,最后一层为数组

标签 javascript typescript sorting

我有一个像这样的 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 但不同的是,第三层是对象数组。

最佳答案

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

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; }

关于JavaScript 将数据分组到 TreeView 中,深度为 2 层,最后一层为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60201956/

相关文章:

python - 在python中将一维列表转换为具有给定行长度的二维列表

javascript - 即时更改 Controller

javascript - 基于使用指令的变量添加 css 类(或样式)

javascript - 使用 three.js 和 React 迭代定位具有 DOM 像素的球体

html - 无法读取未定义的属性 'nativeElement' - ngAfterViewInit

php - 如何使用php按字母顺序排列

excel - Excel/SharedStrings 的排序算法

javascript - 向 Chrome 扩展程序授权 YouTube API

typescript - 如何在 TypeScript 中使用本地库开发项目?

node.js - 如何将 0x(用于 Node.js 分析)与 TS-Node 结合使用?