使用 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 次浏览

开启你的职业生涯

完成课程以获得认证

入门
广告