![](/img/trans.png)
[英]Reformatting deeply nested JSON object with varying length into an array of simplified objects
[英]Creating filtered and simplified data from deeply nested array of objects
根據對嵌套對象屬性值的比較,我有一些復雜的數據集,我需要將其簡化並拆分為兩個不同的集。
這是我正在使用的數據結構:
[
{
object: { id: 123 },
group: [
{
events: [
{
type: 'type',
schedule: [
{
time: '2019-10-30T09:30:00+00:00',
},
{
time: '2019-10-21T21:00:00+00:00',
}
],
},
{
type: 'type',
schedule: [
{
time: '2019-10-24T09:30:00+00:00',
},
{
time: '2019-09-22T21:00:00+00:00',
},
],
},
],
},
],
},
]
最重要的事情是將這些數據分成兩個不同的組(對象數組)的基礎上,無論與否的schedule
的價值time
是在過去還是在未來。 這也將有助於簡化整個結構。 有很多屬性附加到對象上,只要嵌套合乎邏輯且可用,我就可以將整個對象放入其中,而不僅僅是挑選重要的。
因此,對於“過去”數據來說,這樣的事情是理想的:
[
{
id: 123,
events: [
{
type: 'type',
schedule: [
{
time: '2019-10-21T21:00:00+00:00',
}
],
},
{
type: 'type',
schedule: [
{
time: '2019-09-22T21:00:00+00:00',
}
],
}
]
}
]
我一直在嘗試使用不同的數組方法( filter
和map
)來吐出適合我需要的東西,但不知道如何正確地做到這一點。 主要是如何根據嵌套值進行過濾並復制匹配項上的所有嵌套結構。
嘗試使用map
方法和spread
運算符:
const result = data.map(({object, group}) =>
({ ...object, events: group.map(g=> g.events)}));
const data = [ { object: { id: 123 }, group: [ { events: [ { type: 'type', schedule: [ { time: '2019-10-30T09:30:00+00:00', }, { time: '2019-10-21T21:00:00+00:00', } ], }, { type: 'type', schedule: [ { time: '2019-10-24T09:30:00+00:00', }, { time: '2019-09-22T21:00:00+00:00', }, ], }, ], }, ], }, ]; const result = data.map(({object, group}) => ({ ...object, events: group.map(g=> g.events)})); console.log(result)
您需要map()來重構數組, 傳播語法以就地迭代對象屬性,並需要filter()根據條件過濾數據。
使用下面的代碼,您可以獲得所有過去事件的數組。 您可以相應地修改條件以獲取所有未來事件。
// mapping from old data array
const pastData = data.map(({object, group}) => ({
// get all properties of the nested "object"
...object,
// map "events" into a new structure
events: group[0].events.map((event) => (
{
// get all other properties
...event,
// include only those "schedule" objects where time is less than current date
schedule: event.schedule.filter(schedule => new Date(schedule.time) < new Date()),
}
)),
}));
這是一個工作示例:
const data = [ { object: { id: 123 }, group: [ { events: [ { type: 'type', schedule: [ { time: '2019-10-30T09:30:00+00:00', }, { time: '2020-10-21T21:00:00+00:00', } ], }, { type: 'type', schedule: [ { time: '2019-10-24T09:30:00+00:00', }, { time: '2020-09-22T21:00:00+00:00', }, ], }, ], }, ], }, ]; const pastData = data.map(({object, group}) => ({ ...object, events: group[0].events.map((event) => ( { ...event, schedule: event.schedule.filter(schedule => new Date(schedule.time) < new Date()), } )), })); const futureData = data.map(({object, group}) => ({ ...object, events: group[0].events.map((event) => ( { ...event, schedule: event.schedule.filter(schedule => new Date(schedule.time) >= new Date()) } )) })); console.log('past data:', pastData, ', future data:', futureData);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.