有没有简单一点的写法,现在只能求出最多元素,如果最少元素也想展示出来应该怎么改?
let array=['1','3','4','3','5','5','5','5','1'];
function A(arr){
let map=new Map();
let key=array[0],
value=1;
arr.forEach((item)=>{
if(map.get(item)!==undefined){
let num=map.get(item);
map.set(item,++num);
}else{
map.set(item,1);
}
if (map.get(item) > value) {
key = item;
value = map.get(item);
}
});
console.log(key,value);
}
A(array);
思路是一样的,你求最大时,假定最大初始值是
0
,之后遍历以后,发现只要大于当前最大值就重新赋值最大值。那求最小值也一样啊,直接假定最小初始值是 Map 中的第一个值,然后遍历,只要比这个最小值小的,那就重新赋值最小值。
另外,判定
Map
中有没有某个key
,可以使用Map.prototype.has
,少码几个字,可以早点下班回家。updated
鉴于大家都履行
talk is cheap,show me the code
的原则,所以我也抽空实现一版,感觉是有点小bug
的,仅供参考:这里我默认传入数组都是
number[]
类型的了,如果要直接用的话,记得转换一下类型,运行结果: