如何在JavaScript中找出数组中出现次数最多的元素?
解决思路
方法一:对象统计+遍历找最大值
- 统计地点出现次数
用reduce遍历数组,生成一个记录每个地点出现次数的对象:
const locationCount = visitedLocations.reduce((countObj, loc) => { countObj[loc] = (countObj[loc] || 0) + 1; return countObj; }, {});
- 定位次数最多的地点
遍历统计对象,记录次数最高的地点:
let mostVisited = null; let maxTimes = 0; for (const [loc, times] of Object.entries(locationCount)) { if (times > maxTimes) { maxTimes = times; mostVisited = loc; } }
最终mostVisited就是出现次数最多的地点。
方法二:处理多地点次数并列的情况
如果有多个地点出现次数相同且都是最大值,用以下方式获取所有符合条件的地点:
// 先获取最大出现次数 const maxCount = Math.max(...Object.values(locationCount)); // 筛选出所有次数等于最大值的地点 const topLocations = Object.keys(locationCount).filter(loc => locationCount[loc] === maxCount);
方法三:用Map处理复杂类型的location
如果location是对象而非字符串,普通对象统计会失效,改用Map更稳妥:
const locationMap = new Map(); visitedLocations.forEach(loc => { // 对象转成唯一字符串作为键 const key = typeof loc === 'object' ? JSON.stringify(loc) : loc; locationMap.set(key, (locationMap.get(key) || 0) + 1); }); // 找出次数最多的地点 let mostVisited = null; let maxCount = 0; for (const [key, count] of locationMap.entries()) { if (count > maxCount) { maxCount = count; // 还原对象类型的地点 mostVisited = typeof key === 'string' && key.startsWith('{') ? JSON.parse(key) : key; } }
内容的提问来源于stack exchange,提问作者hoddypeak
相关产品推荐
相关产品推荐

