我有以下 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;
}
}
结果为:[尺寸:244,公制: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"
的计算结果不是做我所期待的事情。
- 为什么会发生这种情况?我无法确定原因
- 如何获取一个在唯一循环中包含两种信息(类型 + 状态)的数组?
最佳答案
如果我理解得很好,您想忽略类型为“METRIC”的项目。
对于您的代码,如果它是“METRIC”,则会评估 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;
}
}
另请注意,我使用了对象 {}
而不是数组 []
。当键不是正整数时使用数组是一种不好的做法。
关于javascript - 考虑 2 个不同的键,计算 JSON 数组中的唯一元素 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319789/