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

关于数组去重,在前端面试过程当中常常问到,本身也是碰到过,在网上也看到了各类版本的方式,因此就大概总结了3种方式,但愿对同窗们有所帮助。前端

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

一、使用对象的方式面试

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)看一下。

二、使用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到该数组

三、数组的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的数组

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

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

一、使用对象保存数据对象

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);  //出现次数最多的元素

二、使用正则表达式字符串

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

三、使用lastIndexOfit

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:关于数组去重和获取出现次数最多的字符,目前知道这几种方法,有不一样的意见的同窗欢迎提意见,有错误地方也请积极指出,谢谢。
io

相关文章
相关标签/搜索