How to group an array of objects by key

后端 未结 24 2894
后悔当初
后悔当初 2020-11-21 05:13

Does anyone know of a (lodash if possible too) way to group an array of objects by an object key then create a new array of objects based on the grouping? For example, I hav

24条回答
  •  有刺的猬
    2020-11-21 05:44

    const reGroup = (list, key) => {
        const newGroup = {};
        list.forEach(item => {
            const newItem = Object.assign({}, item);
            delete newItem[key];
            newGroup[item[key]] = newGroup[item[key]] || [];
            newGroup[item[key]].push(newItem);
        });
        return newGroup;
    };
    
    const animals = [
      {
        type: 'dog',
        breed: 'puddle'
      },
      {
        type: 'dog',
        breed: 'labradoodle'
      },
      {
        type: 'cat',
        breed: 'siamese'
      },
      {
        type: 'dog',
        breed: 'french bulldog'
      },
      {
        type: 'cat',
        breed: 'mud'
      }
    ];
    console.log(reGroup(animals, 'type'));
    
    const cars = [
      {
          'make': 'audi',
          'model': 'r8',
          'year': '2012'
      }, {
          'make': 'audi',
          'model': 'rs5',
          'year': '2013'
      }, {
          'make': 'ford',
          'model': 'mustang',
          'year': '2012'
      }, {
          'make': 'ford',
          'model': 'fusion',
          'year': '2015'
      }, {
          'make': 'kia',
          'model': 'optima',
          'year': '2012'
      },
    ];
    
    console.log(reGroup(cars, 'make'));
    

提交回复
热议问题