2013-07-17 115 views
2

我託管一個web api服務,該服務返回過去12個月中我的模型「myModel」的快照。我在客戶端收到的json數組是一個簡單的12個「myMydel」對象數組。從模型陣列樞軸json數據

如果基於myModel具有屬性「foo」的和「bar」,是否有在javascript一種有效的方式以樞轉所述陣列,以產生特性的陣列的集合中,例如:

我想變換

history{ 
    myModel[] 
    myModel[0] 
     foo: 1 
     bar: 2 
     Key: 1 
    myModel[1] 
     foo: 3 
     bar: 4 
     Key: 1 
} 

history{ 
    "1"{ //key 
     foo[] 
     foo[0]: 1 
     foo[1]: 3 
     bar[] 
     bar[0]: 2 
     bar[1]: 4 
     } 
    } 

我願意imple如果這樣做會更有效率的話,可以在服務器端編程。我的api服務是一個.NET 4.5 Web Api。

再次。我的問題是,是否有超高效的方式來實現這些結果在JavaScript?如果沒有,是否有一個在C#中?有人可以提供一些簡單的示例代碼讓我去嗎?

非常感謝幫助。謝謝!

編輯:工作代碼

即使我否決了這一點,我想我會提供實現這個JavaScript的工作示例。它也很快。請注意,每條歷史記錄都必須有一個Key來按組來記錄。

_pivot = function(history) { 
    var i, pivoted, prop, rec; 
    pivoted = {}; 
    if (history !== null) { 
     i = 0; 
     while (i < history.length) { 
     rec = history[i]; 
     pivoted[rec.Key] = pivoted[rec.Key] || {}; 
     for (prop in rec) { 
      pivoted[rec.Key][prop] = pivoted[rec.Key][prop] || []; 
      if (!pivoted[rec.Key][prop].date) { 
      pivoted[rec.Key][prop].push({ 
       value: rec[prop] 
      }); 
      } 

     } 
     i++; 
     } 
     return pivoted; 
    } 
    return null; 
    }; 

回答

1

好,就超高效率,我想除非你改變你的下屬的模式,你將不得不通過你們的模型迭代,無論是服務器端或客戶端,並且每個屬性分配給不同的陣列。

var tempFoo = newArray(); tempBar = newArray(); 
for (var i = 0; i < myModel.length; i++){ 
    tempFoo.push(myModel[i].foo); 
    tempBar.push(myModel[i].bar); 
} 

另外,如果你有它排序在你的服務器端代碼,或者如果它僅僅是自動從數據庫中任何你正在從拉排序,你會看到速度增加。 Why is it faster to process a sorted array than an unsorted array?

希望這會有所幫助,例如,例子是Javascript。

V/R