2015-12-16 44 views
0

我有以下的JSON陣列,它包含了所有從谷歌Analytics(分析)API V3的可用指標和維度:計數獨特元素 - 使用Javascript

http://codebeautify.org/jsonvalidate/d22dcc

我想製作一個包含維度數量和度量數量的表格。我可以用下面的代碼這樣的信息:

var results = new Array(); 
for (var j = 0; j < output.items.length; j++) { 
    var key = output.items[j].attributes.type.toString(); // make it an associative array 
    if (!results[key]) { 
     results[key]=1 
    } else { 
     results[key]=results[key] + 1; 
    } 
} 

結果是:[DIMENSION: 244, METRIC: 206]

不過,我想也獲得的信息有多少,這些維度和指標是公開的,過時或任何其他Google可能在未來給他們的地位。

我假定有該信息(類型+狀態)的一個單迴路和陣列相結合的方式,但我想獲得的尺寸的用下面的代碼的狀態:

var statusDimensions = new Array(); 
for (var j=0; j<output.items.length; j++) { 
    var key = output.items[j].attributes.type.toString(); // make it an associative array 
    var subKey = output.items[j].attributes.status.toString(); // make it an associative array 
    if (key != "METRIC" && !statusDimensions[subKey]) { 
     statusDimensions[subKey] = 1 
    } else { 
     statusDimensions[subKey] = statusDimensions[subKey] + 1; 
    } 
} 

然而,結果是:[PUBLIC: 414, DEPRECATED: 36],這表示如果條件key != "METRIC"的評估沒有達到我期望的水平。

  1. 這是怎麼發生的?我不能確定原因
  2. 我怎麼能得到一個數組,其中包括在一個獨特的循環雙方的信息(類型+狀態)?
+0

爲什麼你認爲如果條件關鍵詞=「公制」不被認爲是!? – void

+0

如果你想要這兩個信息,也許你應該創建一個二維關聯數組。 – Barmar

+0

@void也許「不被考慮」不是最好的論證,因爲它表明我確信代碼是正確的,我不是。我編輯的問題 – agustin

回答

2

如果我理解得很好,你要忽略其類型爲「公制」的項目。

與您的代碼,如果它是「公制」時,else條款進行評估,從而增加計數器。

相反,你可以使用類似

var statusDimensions = {}; 
for (var j=0; j<output.items.length; ++j) { 
    var type = output.items[j].attributes.type, 
     status = output.items[j].attributes.status; 
    if (type != "METRIC") { 
    statusDimensions[status] = (statusDimensions[status] || 0) + 1; 
    } 
} 

另外請注意我用了一個對象{}不是數組[]的。當密鑰不是正整數時使用數組是不好的做法。