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


關於數組去重,在前端面試過程中經常問到,自己也是碰到過,在網上也看到了各種版本的方式,所以就大概總結了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:關於數組去重和獲取出現次數最多的字符,目前知道這幾種方法,有不同的意見的同學歡迎提意見,有錯誤地方也請積極指出,謝謝。



 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM