如何在 JavaScript 中按鍵分組物件陣列


假設我們有一個物件陣列,其中包含有關汽車的資料,如下所示 -

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'
   },
];

我們要求編寫一個 JavaScript 函式,該函式接受一個這樣的物件陣列。然後,該函式應根據物件的“製造”屬性對這些物件進行分組。

輸出

因此,輸出應類似於以下內容 -

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'
   }
   ]
};

示例

程式碼如下所示 -

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));

輸出

並且控制檯中的輸出將是 -

{
   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' } ]
}

更新於: 2020-11-20

923 閱覽

啟動你的 職業

完成課程以獲得認證

開始
廣告
© . All rights reserved.