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

标签 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; 
    } 
}

结果为:[尺寸: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" 的计算结果不是做我所期待的事情。

  1. 为什么会发生这种情况?我无法确定原因
  2. 如何获取一个在唯一循环中包含两种信息(类型 + 状态)的数组?

最佳答案

如果我理解得很好,您想忽略类型为“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/

相关文章:

python - 比 np.meshgrid 更有效的多维状态 Action 空间平铺方法?

C++ - 如果循环内的语句无法正常工作

java - 窃听了我自己的 If-Else 语句

c - 在C中获取 "char *namelist[]"中项目的总数

php - 编写 PHP 脚本将 JSON 转换为 PHP 数组并存储在 MySQL 中

java - java打印阶乘计算过程

javascript - 如何评估我的 Web 应用程序中的用户代码输入

JavaScript - 如何使用 DOM 将多个 LI 放入 1 个 UL

javascript - jQuery/Javascript 暂时禁用由 addEventListener/attachEvent 附加的事件

javascript - JQuery,使用结果的新选择