Javascript 从未知数量的包含JSON对象的列表中提取元素
我正在尝试制作图表组件,它将呈现从API获取的数据。 响应数据是包含JSON对象的等长数组的数组。例如:Javascript 从未知数量的包含JSON对象的列表中提取元素,javascript,arrays,json,Javascript,Arrays,Json,我正在尝试制作图表组件,它将呈现从API获取的数据。 响应数据是包含JSON对象的等长数组的数组。例如: 一个列表中对象的时间戳将始终对应于其他列表中对象的时间戳 图表组件需要一个包含一个ts值和n个其他值的n元素数组数组,其中n是响应数组的长度。如果响应数组的长度为2,则生成的列表应如下所示: [“2021-04-11 12:36:23”,6,8),“2021-04-11 12:38:23”,2,7],…] 我的问题是提取这个数组。我试图对响应数组进行分解,将它们转换为单个变量,然后可以使用
一个列表中对象的时间戳将始终对应于其他列表中对象的时间戳
图表组件需要一个包含一个ts值和n个其他值的n元素数组数组,其中n是响应数组的长度。如果响应数组的长度为2,则生成的列表应如下所示:
[“2021-04-11 12:36:23”,6,8),“2021-04-11 12:38:23”,2,7],…]
我的问题是提取这个数组。我试图对响应数组进行分解,将它们转换为单个变量,然后可以使用foreach迭代这些变量。我没能做到这一点
这是我目前的“解决方案”:
response=[{ts:“2021-04-11 12:36:23”,v:6},{ts:“2021-04-11 12:38:23”,v:8}],{ts:“2021-04-11 12:36:23”,v:2},{ts:“2021-04-11 12:38:23”,v:7}]
响应[0]。映射((e,i)=>{
常数arr=[];
日期=新日期(e[“ts”]);
arr.push(日期);
arr.push(e[“v”]);
arr.push(响应[1][i][v]);
返回arr
})
您可以映射数组的数组,并映射这些数组中的每个元素。最后,将它们缩减为一个包含日期的数组
响应=[
[{
ts:“2021-04-1112:36:23”,
v:6
}, {
ts:“2021-04-1112:38:23”,
v:8
}],
[{
ts:“2021-04-1112:36:23”,
v:2
}, {
ts:“2021-04-1112:38:23”,
v:7
}]
]
console.log(
response.map(
(l,)=>l.map(
(e,i)=>新日期(e[“ts”])
)
)
)
console.log(
response.map(
(l,)=>l.map(
(e,i)=>新日期(e[“ts”])
)
).减少((a,b)=>a.concat(b))
)
尝试以下解决方案:
let output=[];
回应=[{ts:“2021-04-11 12:36:23”,v:6},{ts:“2021-04-11 12:38:23”,v:8},{ts:“2021-04-11 12:36:23”,v:2},{ts:“2021-04-11 12:38:23”,v:7}]
用于(让sset响应){
用于(sset的出租项目){
if(输出类型[item.ts]!='undefined'&&output[item.ts].length>0){
输出[item.ts].push(item.v);
}否则{
输出[item.ts]=[item.ts,item.v];
}
}
}
console.log(output)
I最终在@sssurii answer上展开。图表组件需要数据对象具有相同的维度,这就是填充空字符串的原因
代码:
let output=[];
设temp=[];
设i=1;
让dataLength=dataFetch.length;
for(让数据获取的res){
for(让一组res){
let date=新日期(set.ts).toISOString();
如果(温度[日期]的类型!=“未定义”和温度[日期]。长度>0){
温度[日期]。拼接(i,0,设置为v);
}否则{
temp[date]=新数组(dataLength+1)。填充(“”);
临时[日期][0]=日期;
温度[日期]。拼接(i,0,设置为v);
}
输出推送(温度[日期]);
}
i+=1;