Javascript 使用嵌套键和日期键合并对象的最有效方法是什么?
这是一个示例数据集:Javascript 使用嵌套键和日期键合并对象的最有效方法是什么?,javascript,arrays,ecmascript-6,javascript-objects,Javascript,Arrays,Ecmascript 6,Javascript Objects,这是一个示例数据集: const largeObject = { "4249":{ "2018-07-25":[ { "start":"2016-07-25T14:09:20.453Z", "end":"2016-07-25T14:17:52.147Z" } ] }, "9939":{ "2018-07-25":[ { "start":"2016-07-25T00:50:08.7
const largeObject = {
"4249":{
"2018-07-25":[
{
"start":"2016-07-25T14:09:20.453Z",
"end":"2016-07-25T14:17:52.147Z"
}
]
},
"9939":{
"2018-07-25":[
{
"start":"2016-07-25T00:50:08.768Z",
"end":"2016-07-25T00:53:16.514Z"
}
]
},
"2149":{
"2018-07-25":[
{
"start":"2016-07-25T00:42:02.569Z",
"end":"2016-07-25T00:43:07.689Z"
}
]
},
"6929":{
"2018-07-24":[
{
"start":"2016-07-24T00:44:30.479Z",
"end":"2016-07-24T00:46:41.315Z"
}
]
},
"7930":{
"2018-07-24":[
{
"start":"2016-07-24T00:39:44.152Z",
"end":"2016-07-24T00:44:05.420Z"
}
]
},
"4796":{
"2018-07-22":[
{
"start":"2016-07-22T12:48:56.169Z",
"end":"2016-07-22T13:38:28.136Z"
}
]
}
}
我正试图找到最有效的方法来实现这样的目标:
const filteredObject = {
"2018-07-25": [
{
"start":"2016-07-25T14:09:20.453Z",
"end":"2016-07-25T14:17:52.147Z"
}, {
"start":"2016-07-25T00:50:08.768Z",
"end":"2016-07-25T00:53:16.514Z"
},
{
"start":"2016-07-25T00:42:02.569Z",
"end":"2016-07-25T00:43:07.689Z"
}
],
"2018-07-24": [
{
"start":"2016-07-24T00:44:30.479Z",
"end":"2016-07-24T00:46:41.315Z"
},
{
"start":"2016-07-24T00:39:44.152Z",
"end":"2016-07-24T00:44:05.420Z"
}
],
"2018-07-22": [
{
"start":"2016-07-22T12:48:56.169Z",
"end":"2016-07-22T13:38:28.136Z"
}
]
};
到目前为止,我已经做了:
const filteredObject = {}
const newArr = []
for(key in largeObject){
console.log(largeObject[key])
}
这就去掉了随机字符串,但仍然让我明白:
{ '2018-07-24':
[ { start: '2016-07-24T00:44:30.479Z',
end: '2016-07-24T00:46:41.315Z' } ] }
{ '2018-07-25':
[ { start: '2016-07-25T00:50:08.768Z',
end: '2016-07-25T00:53:16.514Z' } ] }
{ '2018-07-25':
[ { start: '2016-07-25T14:09:20.453Z',
end: '2016-07-25T14:17:52.147Z' } ] }
{ '2018-07-24':
[ { start: '2016-07-24T00:39:44.152Z',
end: '2016-07-24T00:44:05.420Z' } ] }
{ '2018-07-22':
[ { start: '2016-07-22T12:48:56.169Z',
end: '2016-07-22T13:38:28.136Z' } ] }
{ '2018-07-25':
[ { start: '2016-07-25T00:42:02.569Z',
end: '2016-07-25T00:43:07.689Z' } ] }
这就是我所能做到的。我仍然需要找到一种方法来合并具有相同键值的所有数组。似乎我需要迭代这个对象,将日期作为键,并将与该日期键关联的所有数组推送到一个数组中
处理这样的事情最好的方法是什么?我还希望尽可能高效地执行此操作,而不必在每次检查日期键和/或将开始/结束对象推送到它自己的数组时迭代整个大型对象 您可以从原始数据的
Object.values()
开始。这将为您提供一个值数组,而无需使用第一级键。然后,对于每一个,将其分解为一个键和一个值。如果键不存在,则添加带有数组值的键,并合并到数据中
constlargeobject={“4249”:{“2018-07-25”:{“start”:“2016-07-25T14:09:20.453Z”,“end”:“2016-07-25T14:17:52.147Z”},“9939”:{“2018-07-25”:{“start”:“2016-07-25T00:50:08.768Z”,“end”:“2016-07-25T00:53:16.514Z”},“2149”:{“start”2018-07-25:{“start”2016-07-25T00:560.698Z”}“2018-07-24”:[{“开始”:“2016-07-24T00:44:30.479Z”,“结束”:“2016-07-24T00:46:41.315Z”},“7930”:{“2018-07-24”:[{“开始”:“2016-07-24T00:39:44.152Z”,“结束”:“2016-07-24T00:44:05.420Z”},“4796”:{“2018-07-22”:“开始”2016-07-22T12:48:56.Z”,“结束”:“2016-07-22T13:136Z”}
让过滤后的=对象。值(大对象)。减少((a,c)=>{
Object.entries(c.forEach)([k,v])=>{
(a[k]| |(a[k]=[]))。推动(…v)
})
归还
},{})
console.log(过滤)
到目前为止您自己有没有尝试过?请发布您尝试过的代码,我尝试了console.log两个嵌套的for in循环,并将第二个循环的值推送到另一个数组中。例如:for(key in largeObject){for(the date in key){console.log(“the date:,the date)}但是它只打印每个字符串的字符我试过console.log
-console.log实际上没有做任何事情,它被用来调试代码-你似乎已经写了零行我只是提到console.log,以便让读者知道我在思考过程中的位置。假设我没有写任何代码,特别是自从我更新了我的问题后。。。