javascript - 如何在 JavaScript 中动态填充多维数组?

标签 javascript multidimensional-array array.prototype.map

我有一个从 URL 请求中获取的对象:

var data = {
    "DataSet": {
      "Series": [
     {
      "@FREQ": "A",
      "@REF_AREA": "BF",
      "@INDICATOR": "NGDP_R_PC_PP_PT",
      "@UNIT_MULT": "0",
      "@TIME_FORMAT": "P1Y",
      "Obs": [
        {
          "@TIME_PERIOD": "2018",
          "@OBS_VALUE": "6"
        },
        {
          "@TIME_PERIOD": "2019",
          "@OBS_VALUE": "5"
        },
        {
          "@TIME_PERIOD": "2020",
          "@OBS_VALUE": "1"
        },
        {
          "@TIME_PERIOD": "2021",
          "@OBS_VALUE": "5"
        }
      ]
    },
    {
      "@FREQ": "A",
      "@REF_AREA": "CI",
      "@INDICATOR": "NGDP_R_PC_PP_PT",
      "@UNIT_MULT": "0",
      "@TIME_FORMAT": "P1Y",
      "Obs": [
        {
          "@TIME_PERIOD": "2018",
          "@OBS_VALUE": "6"
        },
        {
          "@TIME_PERIOD": "2019",
          "@OBS_VALUE": "6"
        },
        {
          "@TIME_PERIOD": "2020",
          "@OBS_VALUE": "2"
        },
        {
          "@TIME_PERIOD": "2021",
          "@OBS_VALUE": "8"
        }
      ]
    }
  ]
}

} 我想要一个如下所示的数组,每个“Obs”数组中的每个年份和值都在其自己的数组中:

var dataSet = [
[["2018","6"],["2019","5"],["2020","1"],["2021","5"]],
[["2018","6"],["2019","6"],["2020","2"],["2021","8"]]
]

我已经尝试过这个:

let dataO = []  
var dataSet = data.Series.map((x,index) => {                  
  dataO.push(x.Obs.map(i=>i['@TIME_PERIOD']))
  dataO.push(x.Obs.map(r=>r['@OBS_VALUE']))
  return dataO
})

但是我得到一个包含 2 个元素的数组,每个元素包含该对象的所有数据。我看不出我哪里出错了。任何帮助表示赞赏。谢谢!

最佳答案

简单的双循环:

var dataSet = [];
data.DataSet.Series.map((x) => {
      var periods = [];
      x.Obs.map((y) => {
          periods.push([y['@TIME_PERIOD'], y['@OBS_VALUE']]);
      }); 

      dataSet.push(periods);
});

可在下面进行测试:

var data = {
  "DataSet": {
    "Series": [{
        "@FREQ": "A",
        "@REF_AREA": "BF",
        "@INDICATOR": "NGDP_R_PC_PP_PT",
        "@UNIT_MULT": "0",
        "@TIME_FORMAT": "P1Y",
        "Obs": [{
            "@TIME_PERIOD": "2018",
            "@OBS_VALUE": "6"
          },
          {
            "@TIME_PERIOD": "2019",
            "@OBS_VALUE": "5"
          },
          {
            "@TIME_PERIOD": "2020",
            "@OBS_VALUE": "1"
          },
          {
            "@TIME_PERIOD": "2021",
            "@OBS_VALUE": "5"
          }
        ]
      },
      {
        "@FREQ": "A",
        "@REF_AREA": "CI",
        "@INDICATOR": "NGDP_R_PC_PP_PT",
        "@UNIT_MULT": "0",
        "@TIME_FORMAT": "P1Y",
        "Obs": [{
            "@TIME_PERIOD": "2018",
            "@OBS_VALUE": "6"
          },
          {
            "@TIME_PERIOD": "2019",
            "@OBS_VALUE": "6"
          },
          {
            "@TIME_PERIOD": "2020",
            "@OBS_VALUE": "2"
          },
          {
            "@TIME_PERIOD": "2021",
            "@OBS_VALUE": "8"
          }
        ]
      }
    ]
  }
};

var dataSet = [];
data.DataSet.Series.map((x) => {
      var periods = [];
      x.Obs.map((y) => {
          periods.push([y['@TIME_PERIOD'], y['@OBS_VALUE']]);
      }); 

      dataSet.push(periods);
});

console.log(dataSet);

关于javascript - 如何在 JavaScript 中动态填充多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62271390/

相关文章:

javascript - 如何使用 Array.prototype.filter 有选择地过滤 Json 数据,同时在结果数组中重命名对象的属性?

javascript - setInterval 调用中的参数之间的差异

php - 使用 array_diff 比较关联数组和数值数组

arrays - 在 OCaml 中设置二维数组的函数

javascript - React JS : Function undefined when called in . map 函数

javascript - 在嵌套的 .map 函数中为 <li> 提供唯一键

javascript - John Resig 继承类和重写方法 - 调用错误的方法

javascript - 这个错误 "Uncaught TypeError: Cannot read property ' style' of undefined” 是什么意思?

javascript - angular.js 从函数内部获取 var

c - 4维数组分配: access violation