【问题标题】:javascript - ES6 array function to create an object from array [closed]javascript - 用于从数组创建对象的 ES6 数组函数 [关闭]
【发布时间】:2020-12-30 10:33:33
【问题描述】:

我想做这个数组:

[
  { 
    event: "LIB",
    block_calendar: "YES",
    obs: "Lorem Ipsum",
    status: "Block",
  },
  { 
    event: "LIB"
    block_calendar: "YES"
    obs: "Ipsum Lorem"
    status: "Block"
  }
]

变成这个物体

{
  event: "LIB",
  obs: ["Lorem Ipsum","Ipsum Lorem"]
}

如何使用 ES6 完成这个结果?

【问题讨论】:

  • 这是相当标准的“groupBy”操作。如果您还没有这样做,请尝试研究该术语。如果您已经尝试解决此问题但未按预期工作,请向我们展示该代码。这里的目标是帮助您编写代码,而不是为您完成所有工作
  • 谢谢你,是的,这就是我想要的。我应该多搜索一点,并在这个问题上付出更多的努力,你是对的。我只是尽量简化,我的错。但是,我使用.reduce 方法通过上述答案的适应解决方案解决了我的问题。

标签: javascript vue.js ecmascript-6


【解决方案1】:

使用Array#reduce 来累积具有所需数据的对象。数组中的 Foreach 对象查看累积的对象是否具有 lib-key 的条目(即它不是未定义的)。如果不使用属性 event 和 obs 创建它(以空数组作为开始)。在这两种情况下,将您的 obs 值添加到此数组中。
要从中获得所需的数组,请使用 Object#values 摆脱外部分组事件。

注意:我稍微概括了您的问题,以便您可以将被分组的不同事件。

let arr = [
  { 
    event: "LIB",
    block_calendar: "YES",
    obs: "Lorem Ipsum",
    status: "Block",
  },
  { 
    event: "LIB",
    block_calendar: "YES",
    obs: "Ipsum Lorem",
    status: "Block"
  }
];

let result = Object.values(arr.reduce((acc, cur) => {
    if (!acc[cur.event]) 
        acc[cur.event] = {event: cur.event, obs: []};
    acc[cur.event].obs.push(cur.obs);
    return acc;
}, {}));

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 2019-09-23
    • 2023-03-15
    • 2019-07-17
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多