2013-08-06 80 views
2

這是我簡化形式的Json對象。linq.js groupby與Json

var jsonObject = 
    [ 
     {"City":"Monroe","Country":"USA","Latitude":47.8524,"Longitude":-121.98151}, 
     {"City":"Austin","Country":"USA","Latitude":30.40137,"Longitude":-97.73542}, 
     {"City":"Austin","Country":"USA","Latitude":30.32198,"Longitude":-97.70864} 
    ] 

我想用市GROUPBY和獲得的屬於特定城市的記錄數,我到目前爲止已經試過的代碼是

var query2 = $.Enumerable.From(jsonObject) 
.GroupBy(
function(record) {return record.City}, 

function(record) { 
     return {City: record.City} 
    }, 
function(rec) { 
     return {City:rec} 
    } 
).ToArray(); 

我仍然沒能得到我在這裏做錯了什麼。我是linq.js的新手......任何幫助都會令人滿意,或者至少我指向正確的方向。

+0

'變種query4 = $ .Enumerable.From(JSONObject的) .GroupBy( 「{城市:$。城市}」, 空, 功能(鍵,G){VAR 結果= { 市:key.City }; 返回結果; }, 「$。市」 ) .ToArray();'仍然沒有工作... :( – Raza

回答

3

//組記錄

$.Enumerable.From(heatMapObjects) 
           .GroupBy(
            "{ City: $.City }", 
            null, 
            function (key, g) { 
             var result = { 
              City:key.City          
             }; 
             var groupResults = []; 
             g.ForEach(function (item) { 
              groupResults.push(item); 
             }); 

            //push into array 
            groupedRecordsCollection.push(groupResults); 
           }, 
           "$.City" // compare selector needed 
          ) 
          .ToArray(); 

這解決了我的問題。

6

所以你只是想得到城市的數量?試試這個:

var query = Enumerable.From(jsonObject) 
    .GroupBy(
     "$.City", 
     null, 
     "{ City: $, Count: $$.Count() }") // $: Key, $$: Group 
    .ToArray(); 
+1

這幫助我很多關於含義$和$$ – Roland

+2

簡單地在lambda字符串中使用'$'時對應於函數的一個參數。它們的數量表明它代表了最多四個參數。所以'$'是第一個參數,'$$'是第二個,'$$$'是第三個,'$$$$'是第四個。所以只要你知道函數的預期簽名是什麼,它應該很容易解密。 –