linqjs分组由多个级别组成

时间:2014-06-16 01:53:28

标签: javascript linq group-by linq.js

我试图找出如何在多个级别进行分组:

给出以下输入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"分组。然后"分组"。 "分组"作为父母的孩子" 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();

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

1 个答案:

答案 0 :(得分:0)

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

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