我有以下JSON数组,其中包含Google Analytics API v3中的所有可用指标和维度:
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]
,表示if条件key != "METRIC"
的评估没有达到我期望的效果。
答案 0 :(得分:2)
如果我理解得很清楚,你想忽略那些类型为&#34; METRIC&#34;的项目。
使用您的代码,如果它是&#34; METRIC&#34;,则会计算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;
}
}
另请注意,我使用了对象{}
而不是数组[]
。当键不是正整数时使用数组是一种不好的做法。