【问题标题】:Can't loop array after grouping with .reduce使用 .reduce 分组后无法循环数组
【发布时间】:2022-10-12 21:25:00
【问题描述】:

我有以下 meetings 对象:

[
    {
        "id": 19,
        "duration": 1.75,
        "Employee": {
            "name": "Jeanne",
        }
    },
    {
        "id": 20,
        "duration": 1.00,
        "Employee": {
            "name": "Louis",
        }
    },
    {
        "id": 21,
        "duration": 1.00,
        "Employee": {
            "name": "Jeanne",
        }
    }

]

我想按 Employee.name 对其进行分组。使用reduce() 这是我想出的:

meetings.reduce(function (r, a) {
            r[a.Employee.name] = r[a.Employee.name] || [];
            r[a.Employee.name].push(a);
            return r;
}

结果对象如下:

{
    "Jeanne": [
        {
            "id": 19,
            "duration": 1.75,
            "Employee": {
                "name": "Jeanne"
            }
        },
        {
            "id": 21,
            "duration": 1.00,
            "Employee": {
                "name": "Jeanne"
            }
        }
    ],
    "Louis": [
        {
            "id": 20,
            "duration": 1.00,
            "Employee": {
                "name": "Louis"
            }
        }
    ]
}

如果我尝试 map() 或 forEach() 我无法获得元素的值:

Array.from(thisMeeting).forEach(element => console.log(element)); 
return `undefined`;

【问题讨论】:

  • forEach 是一个数组函数,你的 reduce 正在创建一个对象。你也许可以使用Object.entries(thisMetting).forEach(([key, value]) => 来做你想做的事。
  • 您发布的内容中没有meetings.data。
  • 如果你想遍历一个对象,那么你可能会喜欢Object.entries
  • @Pointy 确实,我纠正了这个问题

标签: javascript loops


【解决方案1】:

Array.from-ming 一个 Object 将导致一个空数组。 您必须使用Object.entries(thisMeeting).forEach… 遍历对象键并获取其中的值。

【讨论】:

    【解决方案2】:

    你可以试试这个

    const myData =[
        {
            "id": 19,
            "duration": 1.75,
            "Employee": {
                "name": "Jeanne",
            }
        },
        {
            "id": 20,
            "duration": 1.00,
            "Employee": {
                "name": "Louis",
            }
        },
        {
            "id": 21,
            "duration": 1.00,
            "Employee": {
                "name": "Jeanne",
            }
        }
    
    ]
    
    let data = {}
    for (const [key, value] of Object.entries(myData)) {
      data[value.Employee.name] = data[value.Employee.name] || []
      data[value.Employee.name].push(value);
    }
    
    console.log(data)

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 2020-11-25
      • 1970-01-01
      • 2020-06-07
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      相关资源
      最近更新 更多