按相等值将数组分组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 ] ]