Computer >> Máy Tính >  >> Lập trình >> Javascript

Cách nhóm một mảng đối tượng theo khóa trong JavaScript

Giả sử, chúng ta có một mảng đối tượng chứa dữ liệu về một số ô tô như thế này -

const arr = [
   {
      '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'
   },
];

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng các đối tượng như vậy. Sau đó, hàm sẽ nhóm các đối tượng lại với nhau dựa trên thuộc tính 'make' của chúng.

Đầu ra

Do đó, đầu ra sẽ giống như thế này -

const output = {
   'audi': [
   {
      'model': 'r8',
      'year': '2012'
   }, {
      'model': 'rs5',
      'year': '2013'
   },
],
'ford': [
   {
      'model': 'mustang',
      'year': '2012'
   }, {
      'model': 'fusion',
      'year': '2015'
   }
],
'kia': [
   {
      'model': 'optima',
      'year': '2012'
   }
   ]
};

Ví dụ

Mã cho điều này sẽ là -

const arr = [
   {
      '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'
   },
];
const groupByMake = (arr = []) => {
   let result = [];
   result = arr.reduce((r, a) => {
      r[a.make] = r[a.make] || [];
      r[a.make].push(a);
      return r;
   }, Object.create(null));
   return result;
};
console.log(groupByMake(arr));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

{
   audi: [
      { make: 'audi', model: 'r8', year: '2012' },
      { make: 'audi', model: 'rs5', year: '2013' }
   ],
   ford: [
      { make: 'ford', model: 'mustang', year: '2012' },
      { make: 'ford', model: 'fusion', year: '2015' }
   ],
   kia: [ { make: 'kia', model: 'optima', year: '2012' } ]
}