代码之家  ›  专栏  ›  技术社区  ›  Monmon

如何创建一个数组,将该数组中的每个对象按特定值分组

  •  -1
  • Monmon  · 技术社区  · 1 年前

    我有一组对象

    enter image description here

    是否可以在mysql中进行查询,以生成由group_id分组的2个对象数组组成的数组。

    后果

    enter image description here

    如果不能在javascript中做到这一点,那么组ID也需要是动态的。?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Hao Wu    1 年前

    您可以考虑使用新提供的API Object.groupBy 检查 its compatibility .

    const input = [
      {
        id: 1,
        group_id: 1,
        name: "name 1 "
      },
      {
        id: 2,
        group_id: 1,
        name: "name 2 "
      },
      {
        id: 3,
        group_id: 1,
        name: "name 3 "
      },
      {
        id: 4,
        group_id: 2,
        name: "name 4 "
      },
      {
        id: 5,
        group_id: 2,
        name: "name 5 "
      },
      {
        id: 6,
        group_id: 2,
        name: "name 6 "
      }
    ];
    
    const output = Object.values(Object.groupBy(input, obj => obj.group_id));
    
    console.log(output);

    使用 Array.reduce 如果您需要使用较旧的浏览器,则可以实现相同的效果。

    const input = [
      {
        id: 1,
        group_id: 1,
        name: "name 1 "
      },
      {
        id: 2,
        group_id: 1,
        name: "name 2 "
      },
      {
        id: 3,
        group_id: 1,
        name: "name 3 "
      },
      {
        id: 4,
        group_id: 2,
        name: "name 4 "
      },
      {
        id: 5,
        group_id: 2,
        name: "name 5 "
      },
      {
        id: 6,
        group_id: 2,
        name: "name 6 "
      }
    ];
    
    const output = Object.values(input.reduce((acc, cur) => {
      if (!acc[cur.group_id]) 
        acc[cur.group_id] = [];
      acc[cur.group_id].push(cur);
      return acc;
    }, {}));
    
    console.log(output);