眾所周知,indexOf()這個方法經常出現在字符串的使用中,也許是用來尋找字符串中某一字符在字符串中的位置,或者也可以用來尋找字符串中重復出現的字符有哪些。對於剛接觸 JS 的我們來說,在對數組的操作中常用的是向數組添加元素(push()和unshift())、從數組中刪除元素(pop()和shift()),對於不常用的 indexOf()方法,我們則是一臉懵逼,但是這個方法卻有很強大的作用,下面直接來個demo:
清除數組中重復出現的元素:
var arr1 = [ 1,3,3,4,4 , 4,"aba","aba" ]; //數組字面量的形式創建數組。
var arr2 = [ ];
for ( var i=0; i<arr1.length; i++){
if(arr2.indexOf(arr1[i])<0){ // 在數組arr2中匹配是否有arr[i]這個元素存在,有就返回這個元素在數組中的下表位置,沒有匹配返回-1
arr2.push(arr1[i]);
}
}
console.log(arr2); 在控制台(f12 熱鍵打開開發者工具)輸出的結果是
1 , 3 , 4 , "aba"
怎么計算數組中元素重復出現的次數?這就運用到了對象概念的理解:
var arr1 = [ 1,3,3,4,4,4,"aba","aba" ];
var obj = {};
for( var i=0 ;i< arr1.length; i++){
if( !obj[arr1[i]] ){ //訪問對象屬性的方式
obj[arr1[i]] = 1; //設置對象屬性
}
else{
obj[arr1[i]]++;
}
}
for (key in obj){
console.log(key+":"+obj[key]);
}
依據數組清除重復元素的原理,我們也能寫出查找字符串中重復出現的字母有哪些:
var str = "abareevadrgr";
var str2 = ""; // 存放重復的元素
var arr1 =str.split(""); //將字符串轉換成數組。
var arr2 = [ ];
for (var i =0 ; i<arr1.length ; i++){
if( arr2.indexOf(arr1[i])<0){
arr2.push(arr[i]); // 起到一個中轉戰的作用,以此來排除重復元素。
}
else{
if(str2.indexOf(arr1[i])<0){ //這個字母在字符串 str 中可能出現多次,所以要再判斷,避免將重復的元素全部輸出。
str2+=arr1[i];
}
}
}
console.log(str2); 在控制台輸出的結果是 aer
如有不足之處,歡迎交流。