【问题标题】:linqjs group by multiple levelslinqjs 按多个级别分组
【发布时间】:2014-06-16 01:53:27
【问题描述】:

我正在尝试弄清楚如何在多个级别进行分组:

给定以下输入 JSON:

[
{
    "GroupingMajor": "Fruit",
    "Grouping": "Banana",
    "Description": "10 Bananas",
    "Price": 20609.82,
},
{
    "GroupingMajor": "Fruit",
    "Grouping": "Apple",
    "Description": "13 Apples",
    "Price": 4567.98,
},
{
    "GroupingMajor": "Dairy",
    "Grouping": "Cheese",
    "Description": "1 KG",
    "Price": 76456.76,
}

]

我想创建以下类型的输出:

{
"name": "root",
"children": [
{
    "name": "Fruit",
    "children": [
        {
            {"name": "Apple", "price": 4567.98},
            {"name": "Banana", "price": 20609.82}
    }]
},
{
    "name": "Dairy",
    "children": [
        {
            {"name": "Cheese", "price": 76456.76}
    }]
}]

}

即数据先按“GroupingMajor”分组,再按“Grouping”分组。 “Grouping”是父“GroupingMajor”类别的子项。如何使用 linq.js (JavaScript) 生成此输出?

这是我尝试过的一些 JavaScript:

var data = Enumerable.From(dataFood)
                     .GroupBy(
                            function (e) { 
                                return { 
                                    groupmajor: e.GroupingMajor,
                                    groupminor: e.Grouping
                                }},
                            function (e) {                          
                                return {
                                    groupmajor: e.GroupingMajor,
                                    groupminor: e.Grouping,
                                    name: e.GroupingMajor,
                                    price: e.Price,
                                }
                            },
                            function (key, g) {
                                return {
                                    group: key.groupmajor,
                                    groupminor: key.groupminor,
                                    name: g.name,
                                    price: g.price
                                }
                            })
                        .ToArray();

我没有得到正确的分组,也不知道如何生成子组。
任何帮助表示赞赏。

【问题讨论】:

    标签: javascript linq group-by linq.js


    【解决方案1】:

    以下是构建此类查询的方法:

    var query = Enumerable.From(data)
        .GroupBy(
            "$.GroupingMajor", // key
            "{ name: $.Grouping, price: $.Price }", // item
            "{ name: $, children: $$.ToArray() }" // result
        )
        .ToArray();
    var result = {
        name: 'root',
        children: query
    };
    

    这将产生以下结果:

    {
      "name": "root",
      "children": [
        {
          "name": "Fruit",
          "children": [
            {
              "name": "Banana",
              "price": 20609.82
            },
            {
              "name": "Apple",
              "price": 4567.98
            }
          ]
        },
        {
          "name": "Dairy",
          "children": [
            {
              "name": "Cheese",
              "price": 76456.76
            }
          ]
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 2018-09-17
      相关资源
      最近更新 更多