Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách hiệu quả nhất groupBy array of objects trong JavaScript

Dùng Array.prototype.reduce() — O(n), single pass, không dependency.

Implementation

function groupBy(array, key) {
  return array.reduce((acc, obj) => {
    const k = obj[key];
    if (!acc[k]) acc[k] = [];
    acc[k].push(obj);
    return acc;
  }, {});
}

// Usage
const people = [
  { name: 'Lee', age: 21 },
  { name: 'Ajay', age: 20 },
  { name: 'Jane', age: 20 }
];
console.log(groupBy(people, 'age'));

Output

{
  20: [{ name: 'Ajay', age: 20 }, { name: 'Jane', age: 20 }],
  21: [{ name: 'Lee', age: 21 }]
}

Biến thể

  • key là function: groupBy(arr, x => x.age).
  • Dùng Map thay object để giữ key type (number, object...).
  • Lodash: _.groupBy(arr, 'age').