计算JSON数组中的唯一元素,考虑2个不同的键 - Javascript

时间:2015-12-16 18:46:02

标签: javascript arrays if-statement

我有以下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"的评估没有达到我期望的效果。

  1. 为什么会这样?我无法确定原因
  2. 我如何获得一个包含独特循环信息(类型+状态)的数组?

1 个答案:

答案 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;
  }
}

另请注意,我使用了对象{}而不是数组[]。当键不是正整数时使用数组是一种不好的做法。