Javascript:根据匹配的属性id',从对象数组构造一个对象;s:

Javascript:根据匹配的属性id',从对象数组构造一个对象;s:,javascript,object,key,higher-order-functions,Javascript,Object,Key,Higher Order Functions,对于高阶函数仍然非常陌生,如果可能的话,在这里尝试正确使用它们 我有一个从api返回的对象数组,构造如下: [ {"gymId":3467, "halls": [{ "hallId": "25828", "instructorId": 1064, "slotIds": [2088,2089], "sessionId":8188}, {"hallId": "25848", "instructorId": 1067, "slotIds": [2088,2089], "sessionId

对于高阶函数仍然非常陌生,如果可能的话,在这里尝试正确使用它们

我有一个从api返回的对象数组,构造如下:

[ {"gymId":3467, "halls": [{ "hallId": "25828", "instructorId": 1064, 
   "slotIds": [2088,2089], "sessionId":8188}, 
  {"hallId": "25848", "instructorId": 1067, "slotIds": [2088,2089], "sessionId": 8188 }]}]
我想要达到的预期结果是从上面的数组中创建一个这样的对象列表

{2088: [{ "hallId":"25828", "instructorId":1064, "sessionId":8188 }, 
        { "hallId":"25848", "instructorId":1067, "sessionId":8188 }],
 2089: [{ "hallId":"25828", "instructorId":1064, "sessionId":8188 }, 
        { "hallId":"25848", "instructorId":1067, "sessionId":8188 }] 
}
我在想类似的事情

halls.reduce((acc, hall) => {
      hall.slotIdIds.forEach(slotId => {
        acc[slotId] = {
          //expected object properties as above here.
        };
      });
      return acc;
    }, {}),
问题是当我以这种方式减少时,只返回一个hallId,而不是插槽所在的两个匹配的hallId


对于如何解决这个问题有点困惑,非常感谢您提供的提示。

您使用的是acc[slotId]而不是推送或添加,因此它取代了其他选项?看起来像
acc[slotId]
应该是一个数组,您可以在其中添加一个或多个对象。如果我不知道插槽id将是什么,我将如何将其添加到一个对象中,使其成为上述格式的键,例如{2088:[{“hallId”:“25828”,“instructorId”:1064,“sessionId”:8188},{“hallId”:“25848”,“instructorId”:1067,“sessionId”:8188}?