javascript - 如何使用 JavaScript 访问 JSON 数据中嵌套数组中的特定元素?

标签 javascript arrays json object ecmascript-6

我有 JSON 数据,其结构如下。意图是查找特定的数据点,例如年利润5000。

我想通过按名称查找列来做到这一点,例如“profit”,确定列索引(示例中为 3),然后使用列索引选择“data”数组的第二个节点(“annual”)中的第 n 个(第 3 个)元素。

如何使用 Javascript 中的 findIndex() 函数来执行此操作(请参阅下面代码的关键部分)?

JSON 数据:

{
  "datatable": {
    "data": [
      [
        "AAPL",
        "quarterly",
        1000,
        2000
      ],
      [
        "AAPL",
        "annual",
        5000,
        10000
      ]
    ],
    "columns": [{
        "name": "ticker"
        "type": "String"
      },
      {
        "name": "timedim"
        "type": "String"
      },
      {
        "name": "profit",
        "type": "Integer"
      },
      {
        "name": "revenue",
        "type": "Integer"
      }
    ]
  }
}

JavaScript 代码:

  // daten contains the "data" array of the JSON dataset
  // spalten contains the "columns" array of the JSON dataset
  
  var i = spalten.findIndex(obj => obj.name == "profit");
  output += '<p>Annual profit AAPL: ' + daten[i] + '</p>';
  elroot.innerHTML += output;

最佳答案

您有二维数组,因此,您需要两个索引:

const json = {
  "datatable": {
    "data": [
      [
        "AAPL",
        "quarterly",
        1000,
        2000
      ],
      [
        "AAPL",
        "annual",
        5000,
        10000
      ]
    ],
    "columns": [{
        "name": "ticker",
        "type": "String"
      },
      {
        "name": "timedim",
        "type": "String"
      },
      {
        "name": "profit",
        "type": "Integer"
      },
      {
        "name": "revenue",
        "type": "Integer"
      }
    ]
  }
}
var profitIndex = json.datatable.columns.findIndex(item => item.name == 'profit');
var annualIndex = json.datatable.data.findIndex(array => array.indexOf('annual') > -1);
var annualProfit = json.datatable.data[annualIndex][profitIndex];

如果您需要一个函数,它可能如下所示:

var getValueFromJson = function (json, columnName, dataMarker) {
    var columnIndex = json.datatable.columns.findIndex(item => item.name == columnName);
    var dataMarkerIndex = json.datatable.data.findIndex(array => array.indexOf(dataMarker) > -1);
    if (columnIndex < 0 || dataMarkerIndex < 0) {
        return null;
    }
    return json.datatable.data[dataMarkerIndex][columnIndex];
}

console.log(getValueFromJson(json, 'profit', 'quarterly'));
console.log(getValueFromJson(json, 'profit', 'annual'));
console.log(getValueFromJson(json, 'revenue', 'quarterly'));
console.log(getValueFromJson(json, 'revenue', 'annual'));

上面的代码打印:

> 1000
> 5000
> 2000
> 10000

关于javascript - 如何使用 JavaScript 访问 JSON 数据中嵌套数组中的特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54857976/

相关文章:

javascript - jQuery-Ajax 创建的 Checkboxlist 不响应点击

javascript - Access-Control-Allow-Origin 不允许 XMLHttpRequest 无法加载

javascript - Prestashop:如何用 Colorbox 替换 Fancybox?

javascript - 文本字段中的用户输入是什么类型?

javascript - 如何外包 Node.js RESTful API 调用?

arrays - 将从核心数据检索图像放入数组 swift

arrays - 如何将数组传递给匿名函数?

ruby-on-rails - Rspec:检查数组是否包含包含属性的对象

php - JSON 字符串输出浮点值

java - 从 JSON 解析嵌套值并添加到 HashMap