數組去重,判斷字符串中出現次數最多的字符並統計這個次數

關於數組去重,在前端面試過程當中常常問到,本身也是碰到過,在網上也看到了各類版本的方式,因此就大概總結了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

相關文章
相關標籤/搜索