如何在 JavaScript 中动态填充多维数组?
How to dynamically populate a multidimensional array in JavaScript?
我有一个从 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 个元素的数组,每个元素都包含对象的所有数据。我看不出哪里错了。任何帮助表示赞赏。谢谢!
您可以使用 flatMap
:
data.DataSet.Series
.flatMap(x => x.Obs)
.map(x => [x["@TIME_PERIOD"], x["@OBS_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 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);
我有一个从 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 个元素的数组,每个元素都包含对象的所有数据。我看不出哪里错了。任何帮助表示赞赏。谢谢!
您可以使用 flatMap
:
data.DataSet.Series
.flatMap(x => x.Obs)
.map(x => [x["@TIME_PERIOD"], x["@OBS_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 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);