Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中动态填充多维数组?_Javascript_Multidimensional Array_Array.prototype.map - Fatal编程技术网

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

如何在JavaScript中动态填充多维数组?,javascript,multidimensional-array,array.prototype.map,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": [ { "@TIM

我有一个从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个元素的数组,每个元素包含来自对象的所有数据。我看不出我错在哪里。感谢您的帮助。谢谢

您可以使用:

data.DataSet.Series
.flatMap(x=>x.Obs)
.map(x=>[x[“@TIME\u PERIOD”],x[“@OBS\u VALUE”])
简单双循环:

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数据={
“数据集”:{
“系列”:[{
“@FREQ”:“A”,
“@REF_区域”:“BF”,
“@指示器”:“NGDP\u R\u PC\u PP\u PT”,
“@UNIT_MULT”:“0”,
“@TIME_格式”:“P1Y”,
“Obs”:[{
“@TIME_PERIOD”:“2018年”,
“@OBS_值”:“6”
},
{
“@时间段”:“2019年”,
“@OBS_值”:“5”
},
{
“@TIME_PERIOD”:“2020年”,
“@OBS_值”:“1”
},
{
“@TIME_PERIOD”:“2021年”,
“@OBS_值”:“5”
}
]
},
{
“@FREQ”:“A”,
“@REF_AREA”:“CI”,
“@指示器”:“NGDP\u R\u PC\u PP\u PT”,
“@UNIT_MULT”:“0”,
“@TIME_格式”:“P1Y”,
“Obs”:[{
“@TIME_PERIOD”:“2018年”,
“@OBS_值”:“6”
},
{
“@时间段”:“2019年”,
“@OBS_值”:“6”
},
{
“@TIME_PERIOD”:“2020年”,
“@OBS_值”:“2”
},
{
“@TIME_PERIOD”:“2021年”,
“@OBS_值”:“8”
}
]
}
]
}
};
var数据集=[];
data.DataSet.Series.map((x)=>{
风险值期间=[];
x、 Obs.map((y)=>{
push([y['@TIME\u PERIOD'],y['@OBS\u VALUE']);
}); 
数据集推送(周期);
});

console.log(数据集)谢谢,但这给出了一个包含所有值的数组。虽然了解flatMap()很棒,但我可以充分利用它。