首页 >web前端 >js教程 >如何按特定属性对对象数组进行分组并将其他属性合并到数组中?

如何按特定属性对对象数组进行分组并将其他属性合并到数组中?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-15 12:08:14466浏览

How can I group an array of objects by a specific property and consolidate other properties into arrays?

按对象属性对数组项进行分组

给定一个具有组和颜色属性的对象数组,目标是按组值对项目进行分组,从而合并颜色每个组的值。

问题

提供的数组看起来像this:

myArray = [
  {group: "one", color: "red"},
  {group: "two", color: "blue"},
  {group: "one", color: "green"},
  {group: "one", color: "black"}
]

所需的输出是这样的数组:

myArray = [
  {group: "one", color: ["red", "green", "black"]},
  {group: "two", color: ["blue"]}
]

解决方案

  1. 创建组名称到值的映射: 使用reduce()方法创建从组名称到数组的映射颜色。
  2. 转换为所需格式: 通过迭代地图的键并为每个组创建一个对象来创建一个新数组,并将其组属性设置为键并设置其颜色属性与该键关联的颜色数组。

下面是 JavaScript实现:

var myArray = [
    {group: "one", color: "red"},
    {group: "two", color: "blue"},
    {group: "one", color: "green"},
    {group: "one", color: "black"}
];

var group_to_values = myArray.reduce(function (obj, item) {
    obj[item.group] = obj[item.group] || [];
    obj[item.group].push(item.color);
    return obj;
}, {});

var groups = Object.keys(group_to_values).map(function (key) {
    return {group: key, color: group_to_values[key]};
});

console.log("groups:");
console.log(JSON.stringify(groups, null, 4));

此代码创建所需的输出,其中项目按其组属性分组,并将其颜色值合并到数组中。

以上是如何按特定属性对对象数组进行分组并将其他属性合并到数组中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn