首页 > 解决方案 > 按某些属性扩展对象

问题描述

我有一个这样的对象数组,这些对象由休息 API 输出,它本质上是每个 id 每小时每 15 分钟间隔的消息计数。

[
   [
       {id: 1, hour:0, interval_1: 2 ,interval_2: 1, interval_3: 3, interval_4: 0},
       {id: 1, hour:1, interval_1: 2 ,interval_2: 1, interval_3: 3, interval_4: 0},
       {id: 2, hour:0, interval_1: 5 ,interval_2: 1, interval_3: 3, interval_4: 3},
       {id: 2, hour:1, interval_1: 3 ,interval_2: 1, interval_3: 3, interval_4: 0}

   ]

]

如何使用 JavaScript 将其转换为以下数组?

[
   [
       {id: 1, hour:0, interval_1: 2},
       {id: 1, hour:0, interval_2: 1},
       {id: 1, hour:0, interval_3: 3},
       {id: 1, hour:0, interval_4: 0},
       {id: 1, hour:1, interval_1: 2},
       {id: 1, hour:1, interval_2: 1},
       ...
       ...
   ]
]

标签: javascriptarrays

解决方案


您可以分离公共键并迭代其余属性以进行映射。

const
    data = [{ id: 1, hour: 0, interval_1: 2, interval_2: 1, interval_3: 3, interval_4: 0 }, { id: 1, hour: 1, interval_1: 2, interval_2: 1, interval_3: 3, interval_4: 0 }, { id: 2, hour: 0, interval_1: 5, interval_2: 1, interval_3: 3, interval_4: 3 }, { id: 2, hour: 1, interval_1: 3, interval_2: 1, interval_3: 3, interval_4: 0 }],
    result = data.flatMap(({ id, hour, ...o }) =>
        Object.entries(o).map(([k, v]) => ({ id, hour, [k]: v }))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读