数组去重,判断字符串中出现次数最多的字符并统计这个次数

关于数组去重,在前端面试过程中经常问到,自己也是碰到过,在网上也看到了各种版本的方式,所以就大概总结了3种方式,希望对同学们有所帮助。

var arr = [1,2,5,3,4,5,6,2,3,4],
arrobj = {},
newarr = [];

1、使用对象的方式

arr.forEach(function (val, key) {
if(!arrobj[val]){
arrobj[val] = 1;
newarr.push(val)
}
});
console.log(newarr);
[1,2,5,3,4,6]
使用该对象的key是否已经存在,记录重复字符,可以console.log(arrobj)看一下。

2、使用indexOf判断

arr.forEach(function (val, key) {
if(newarr.indexOf(val)<0){
newarr.push(val)
}
});
console.log(newarr);
[1,2,5,3,4,6]
把查找的字符push到新的数组中,indexOf>=0就表明已经push到该数组

3、数组的filter过滤

newarr = arr1.filter(function (val,ind,self) {
return self.indexOf(val) == ind;
});
console.log(newarr);
[1,2,5,3,4,6]
关于数组的filter过滤器,平时用的也很少,val数组元素值,ind元素下标,self该数组,返回条件为true的数组

判断一个字符串中出现次数最多的字符,统计这个次数

var str = 'sseeeeeddddqqq1111111333',
i = 0, len = str.length,
obj = {},max = 0,key = 0;

1、使用对象保存数据

for(i = 0; i < len; i++){
obj[str[i]]?obj[str[i]]++:obj[str[i]]=1;
}
for(i in obj){
if(obj[i]>max){
max = obj[i];
key = i;
}
}
console.log(max);  //出现次数最多的元素的出现次数
console.log(key);  //出现次数最多的元素

2、使用正则表达式

str.replace(/(\w)/g,function (val, key) {
obj[key]?obj[key]++:obj[key]=1;
});
console.log(obj);  //获得obj对象,使用上面for(i in obj)取得出现次数最多的元素和该元素出现的次数
这种写法记得要在正则表达式上写上(),如果不写key获得就是val的下标,而不是元素值

3、使用lastIndexOf

var str1 = str.split('').sort().join('');
for(i = 0, len = str1.length; i < len; i++){
obj[str1[i]] = str1.lastIndexOf(str1[i])-i+1;
i = str1.lastIndexOf(str1[i]);
}
console.log(obj);  //获得obj对象,使用上面的for(i in obj)取得出现次数最多的元素和该元素出现的次数  
从0开始检索获得元素的lastIndex值,并把下次的起始i赋值为上个元素的lastIndex然后+1,是这个元素出现的次数

PS:关于数组去重和获取出现次数最多的字符,目前知道这几种方法,有不同的意见的同学欢迎提意见,有错误地方也请积极指出,谢谢。



 

 

 

 

 

 

 

 

 

 

posted @ 2018-04-03 16:45  大虞国的胖凤  阅读(5229)  评论(0编辑  收藏  举报