2

在我的控制器类和 GetGroupedLogReport 作为 JsonResult 我返回一个具有以下属性的列表:名称,状态,...

鉴于我需要按名称和状态对这些数据进行分组:这是代码:

 function SetReportGrid(pageNumber, extra) {
    $("#gvReportList tbody").html('');
    $('#pagination').html('');
    $.getJSON('/Report/GetGroupedLogReport', {
        fromDate: $('#FromDate').val() || "",
        toDate: $('#ToDate').val() || ""


    }, function (data) {
     //here

        }
                       gvReportList.init();
        });
    });

我需要获取 json 数据并按名称和状态对其进行分组,然后将其放入网格中,我该如何对其进行分组?

这是数据样本:

[Object { Id=563,Name="test",State="test"},{Id=543,Name="test2",State="test2"}]
4

2 回答 2

0

如果您只需要按这两个字段(名称和州)进行分组,您可以使用Alasql库进行分组。

var data = [{ Id:563,Name:"test",State:"test"},{Id:543,Name:"test2",State:"test2"},
            {Id:544,Name:"test2",State:"test2"}, {Id:545,Name:"test2",State:"test2"}];

var res = alasql('SELECT Name, State FROM ? GROUP BY Name, State',[data]);

在 jsFiddle 中试试这个例子。

于 2014-12-21T05:57:10.390 回答
0

JSON 只是一种数据表示法,一种结构,它不提供任何类型的查询。实现该group by操作的一种方法是遍历每个元素并记住前一个并比较它是否已更改。

var key;
data.forEach(function(obj) {
   var k = obj.Name + ":" + obj.State;
   if (key !== k) {
       key = k;
       console.log("New group " + key);
   }
   console.log(obj.Id);
});

如果您的数据没有正确排序,您可以试试这个工具:  LINQ to JavaScript,它的灵感来自 .NET LINQ。它支持查询,如selectwhere, order, ...</p>

总而言之,如果您可以在服务器端执行此操作,您可能会获得更好(更快)的结果。

于 2012-05-06T07:54:00.123 回答