2015-09-29 10 views
1

我有JSON作爲以下,如何從JSON中獲取包含javascript副本的計數數量?

var json = 
     [ 
      {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"0","port":"A"}, 
      {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"1","port":"B"}, 
      {"cardAid":"SFD","displayName":"SFD","SequenceNumber":"2","port":"C"}, 
      {"cardAid":"SFD","displayName":"SFD","SequenceNumber":"3","port":"D"}, 
      {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"4","port":"E"}, 
      {"cardAid":"ALPHG","displayName":"ALPHG","SequenceNumber":"5","port":"F"}, 
      {"cardAid":"BETA","displayName":"BETA","SequenceNumber":"6","port":"G"} 
     ]; 

我使用的代碼來從這個鏈接解析這個JSON, TO Get the number of Count from JSON in javascript?

function count(arr) { 
    var map = {}; 
    for (var i = 0; i < arr.length; i++) { 
     var name = arr[i].cardAid; 
     var port = arr[i].port; 
     if (name in map){ 
      map[name].Count++; 
      map[name].Port += ',' + port; 
     } else { 
      map[name] = { Count: 1, Port: port }; 
     } 
    } 
    return map; 
} 

本函數解析使用cardAid作爲密鑰JSON,並給出輸出as,

{ 
    ALPHG: { Count: 4, Port: "A,B,E,F" }, 
    SFD: { Count: 2, Port: "C,D" }, 
    BETA: { Count: 1, Port: "G" } 
} 

但我需要基於JSON中SequenceNumber的輸出,

{ 
    ALPHG: { Count: 2, Port: "A,B" }, 
    SFD: { Count: 2, Port: "C,D" }, 
    ALPHG: { Count: 2, Port: "E,F" }, 
    BETA: { Count: 1, Port: "G" } 
} 

我如何能在地圖把這個重名基於從JSON

+1

所需輸出缺少第二個'ALPHG'對象之後的逗號。此外,所需的輸出無效,因爲您不能擁有兩個具有相同名稱的對象屬性。它們只會彼此覆蓋,或者在解析器的情況下,它看起來像是將它們連接在一起。 – War10ck

+0

更正了期望的輸出 –

+0

嘿,我不知道你想要什麼....如果你將國家限制爲2,然後再將端口分組到另一個端口,這個輸出可能是可能的,那是你想要的嗎? –

回答

3

中的SequenceNumber這可能是接近你記住(jsfiddle)有什麼,我選擇了有港爲一個數組,而不是一個字符串。但是我有點困惑,因爲SequenceNumber在這個邏輯中沒有影響,也許元素應該首先按SequenceNumber排序?

function count(data) { 
    var result = {}; 

    for (var i = 0; i < data.length; ++i) { 
     var cardAid = data[i].cardAid; 

     if (!(cardAid in result)) { 
      result[cardAid] = []; 
     } 

     // Check if a new "sequence" needs to be created 
     if (i == 0 || data[i-1].cardAid != cardAid) { 
      result[cardAid].push({ Count: 0, Port: [] }); 
     } 

     // Append item to the latest sequence 
     var lastIndex = result[cardAid].length - 1; 
     ++result[cardAid][lastIndex].Count; 
     result[cardAid][lastIndex].Port.push(data[i].port); 
    } 

    return result; 
} 

結果:

{ 
    "ALPHG": [ 
    { 
     "Count": 2, 
     "Port": [ "A", "B" ] 
    }, 
    { 
     "Count": 2, 
     "Port": [ "E", "F" ] 
    } 
    ], 
    "SFD": [ 
    { 
     "Count": 2, 
     "Port": [ "C", "D" ] 
    } 
    ], 
    "BETA": [ 
    { 
     "Count": 1, 
     "Port": [ "G" ] 
    } 
    ] 
} 
+0

這就是我需要的.. 但我不想追加項目到最新的序列。 我想創建一個新的序列 例: 「ALPHG_1」: { 「計數」:2, 「端口」: 「E」, 「F」] }, –

+0

的其他嘗試在[的jsfiddle] (https://jsfiddle.net/rs6oh26e/11/)具有對象鍵「ALPHG_0」,「SFD_0」,「ALPHG_1」,「BETA_0」'。但我想這在代碼的其他部分使用會更棘手。 – NikoNyrh

相關問題