使用 JavaScript 根據相等值對陣列分組


假設我們有一個字串/數字字面陣列,它包含一些重複值,如下所示 −

const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night', 'noon', 'day', 'afternoon', 'day', 'night'];

我們需要編寫一個函式 groupSimilar(),該函式接收此陣列並返回一個新陣列,其中所有重複項都以子陣列的形式組合在一起作為第一個元素,它們在原始陣列中的總數作為第二個元素。

因此,對於此示例,輸出應該是 −

[
   [ 'day', 3 ],
   [ 'night', 4 ],
   [ 'afternoon', 2 ],
   [ 'noon', 2 ]
]

讓我們編寫此函式的程式碼。我們使用 Array.prototype.map() 函式構建一個新陣列,我們使用 Map 來跟蹤陣列中的重複項 −

示例

const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night',
'noon', 'day', 'afternoon', 'day', 'night'];
const groupSimilar = arr => {
   return arr.reduce((acc, val) => {
      const { data, map } = acc;
      const ind = map.get(val);
      if(map.has(val)){
         data[ind][1]++;
      } else {
         map.set(val, data.push([val, 1])-1);
      }
      return { data, map };
   }, {
      data: [],
      map: new Map()
   }).data;
};
console.log(groupSimilar(array));

輸出

控制檯中的輸出將是 −

[ [ 'day', 3 ], [ 'night', 4 ], [ 'afternoon', 2 ], [ 'noon', 2 ] ]

更新於: 2020 年 8 月 25 日

920 次瀏覽

開啟你的職業生涯

完成課程以獲得認證

入門
廣告
© . All rights reserved.