繁体   English   中英

如何从一组数据项创建一个对象?

[英]How does one create an object from an array of data items?

我正在尝试生成一个如下所示的对象:

{
  "te-koop": [{ /*plot 1*/ }, { /*plot 1*/ }],
  "in-optie": [{ /*plot 3*/ }, { /*plot 4*/ }],
  "verkocht": [{ /*plot 5*/ }, { /*plot 6*/ }],
}

带有 forEach 循环。 这是我的代码:

makeArrayFilteredPlots = () => {
    const plots = [];
    this.props.filteredPlots.forEach((plot) => {
      const status = plot.entity.status.slug;
      plots[status].push(plot);
    });
  };

每个状态代表每个键(te-koop、in-optie、verkocht),并且会有多个与每个状态匹配的图。 每个图都是一个对象。

上面的代码片段目前不起作用,有人有建议吗?

  1. 在 JS 中,数组没有命名键,它只是一个事物列表。 如果您想要命名键,请使用对象{}
  2. plots[status]永远不会被初始化。 当您尝试在未定义的内容中使用.push()内容时,脚本会崩溃。 在开始向其中推送内容之前,将其初始化为一个空数组。

 makeArrayFilteredPlots = () => { let plots = {}; this.props.filteredPlots.forEach((plot) => { const status = plot.entity.status.slug; plots[status] = plots[status] || []; // Initialize an empty array plots[status].push(plot); }); console.log(plots); };

从上面的评论...

“目标格式甚至不是有效的 JS 语法。无法清楚地看出 OP 是否要生成数组项,其中每个项都是一个具有单个键(或其他东西)的对象。从生成代码来看,它看起来像 OP想要创建/聚合一个对象,其中每个条目(键值对)都是一个数组。但是我们不是在谈论多维数组。”

复杂的猜测......基于reduce的任务应该解决OP的问题,即生成像plot特定数组的对象这样的配置......

const plotsConfig = this
  .props
  .filteredPlots
  .reduce((result, plot) => {

    const plotKey = plot.entity.status.slug;
    const plotList = result[plotKey] ??= [];

    plotList.push(plot);
    
    return result;

  }, {});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM