Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用嵌套键和日期键合并对象的最有效方法是什么?_Javascript_Arrays_Ecmascript 6_Javascript Objects - Fatal编程技术网

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,以便让读者知道我在思考过程中的位置。假设我没有写任何代码,特别是自从我更新了我的问题后。。。