【问题标题】:Flatten and transform data in Javascript在 Javascript 中展平和转换数据
【发布时间】:2022-09-30 23:39:05
【问题描述】:

给定这个对象(每个数组的项目是相同的):

{
    force_x: [6, 7, 7],
    force_y: [2, 3, 4],
    timestamp: [0.08, 0.016, 0.024]
}

我如何使用 Javascript 为除 timestamp 之外的所有键创建它:

{
    {mode: \"force_x\", value: 6, timestamp: 0.08},
    {mode: \"force_x\", value: 7, timestamp: 0.16},
    {mode: \"force_x\", value: 7, timestamp: 0.24},
    {mode: \"force_y\", value: 2, timestamp: 0.08},
    {mode: \"force_y\", value: 3, timestamp: 0.16},
    {mode: \"force_y\", value: 4, timestamp: 0.24},
}

注意timestamp 数组可以从对象中移除,如果它更容易处理的话。该算法不应指定force_xforce_y 键,并为每个键自动执行。

  • 我们可以以不同于其他键的方式处理timestamp 吗?例如,我们可以显式使用密钥timestamp 吗?

标签: javascript observable-plot


【解决方案1】:

这是一个不错的小单行:

const data = {
    force_x: [6, 7, 7],
    force_y: [2, 3, 4],
    timestamp: [0.08, 0.016, 0.024]
};

const {  timestamp, ...props } = data;

const result = Object.keys(props).flatMap((mode) => props[mode].map((value, i) => ({ mode, value, timestamp: timestamp[i] })));

console.log(result);

首先,我们从数据中排除timestamp。 然后对于每个键,我们需要将其映射到它的“扩展形式”。为此,我们将键的每个值映射到一个对象。在映射时,我们获取元素的索引并使用它来获取对象的相应时间戳。但是,这会给我们一个[[{ ... }, { ... }], ...] 形式的数组,所以我们必须将它展平。幸运的是,我们有一个捷径,那就是flatMap,相当于先使用map,然后再使用flat

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 2021-05-22
    • 2017-09-22
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2018-08-20
    相关资源
    最近更新 更多