如何解决Javascript:以特定数组格式重新排列json输出
对我来说又是愚蠢的时刻。花了几个小时进行循环,映射,归约,词典,但似乎无法弄清楚。我有一个像这样的json数据
{
"timeline": [
{
"series": "series1","data": [
{
"date": "20200713T120000Z","value": 0
},{
"date": "20200714T120000Z","value": 8
},{
"date": "20200715T120000Z","value": 0
}
]
},{
"series": "series2",{
"series": "series3","value": 1
},{
"series": "series4","value": 2
},"value": 4
}
]
}
]
}
我需要这种格式
[
{
date: "20200713T120000Z",series1: 0,series2: 0,series3: 1,series4: 2
},{
date: "20200714T120000Z",series1: 8,series3: 0,series4: 4
}
]
需要使用JavaScript进行此操作。任何帮助/指针将不胜感激。
解决方法
这是为此的临时解决方案,您可以尝试一下。我正在使用import * as GoogleSignIn from 'expo-google-sign-in'
signInAsync = async () => {
try {
await GoogleSignIn.askForPlayServicesAsync()
const result = await GoogleSignIn.signInAsync()
return result
} catch ({ message }) {
return { type: 'failure',message }
}
}
,所以请安装它。
lodash
,
使用多个forEach
循环并构建一个要跟踪的对象。然后得到Object.values
const convert = (arr) => {
const res = {};
arr.forEach(({ series,data }) =>
data.forEach(
({ date,value }) =>
(res[date] = { ...(res[date] ?? { date }),[series]: value })
)
);
return Object.values(res);
};
obj = {"timeline": [ { "series": "series1","data": [ { "date": "20200713T120000Z","value": 0 },{ "date": "20200714T120000Z","value": 8 },{ "date": "20200715T120000Z","value": 0 }] },{ "series": "series2",{ "series": "series3","value": 1 },{ "series": "series4","value": 2 },"value": 4 }] }] }
const res = convert(obj.timeline);
console.log(res)
,
您可以使用一个对象进行分组,并使用一个数组来存储所有键,以便使用所有相同的键获得有序的结果。
这种方法从结果集中过滤掉所有零值。
const
data = { timeline: [{ series: "series1",data: [{ date: "20200713T120000Z",value: 0 },{ date: "20200714T120000Z",value: 8 },{ date: "20200715T120000Z",value: 0 }] },{ series: "series2",{ series: "series3",value: 1 },{ series: "series4",value: 2 },value: 4 }] }] },keys = ['date'],result = Object
.values(data.timeline.reduce((r,{ series,data }) => {
keys.push(series);
data.forEach(({ date,value }) => {
if (!value) return;
if (!r[date]) r[date] = { date };
r[date][series] = value;
});
return r;
},{}))
.map(o => ({ ...Object.fromEntries(keys.map(k => [k,0])),...o }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。