1、编写一个方法去掉一个数组的重复元素:
方法一:普通for循环嵌套;
1 function removeSame(arr){ 2 console.log(arr); 3 for(var i=0, len = arr.length; i<len; i++){ 4 for(var j=i+1; j<len-i; j++){ 5 if(arr[i] === arr[j]){ 6 arr.splice(arr[j], 1); //如果检测到有重复的元素则删除 7 j--; //当有多个重复元素时向前移一个索引防止遗漏某些元素 8 } 9 } 10 } 11 console.log(arr); 12 return arr; 13 } 14 15 var arr = [1,2,3,3,3,3,3,4,4]; 16 removeSame(arr);
方法二:利用for...in去重;
1 function removeSame(arr){ 2 var obj = {}; 3 var newArr = []; 4 var key; 5 6 for(var i=0; i<arr.length; i++){ 7 key = arr[i]; 8 if(obj[key]){ 9 obj[key] = 0; //若未添加进对象,则给其赋值为0; 10 }else{ 11 obj[key] = 0; //若添加进对象过(即出现重复元素),则将其覆盖原属性,保证数组中只有唯一一个属性名; 12 }; 13 }; 14 15 for(key in obj){ 16 newArr.push(key); //将去重后的对象中的属性添加至新数组 17 }; 18 19 console.log(newArr); 20 }
方法三:利用indexOf()(indexOf可以返回元素在数组中的索引位置);
1 function onlyone(arr){ 2 var arr1=[]; //用于保存已去重元素的数组 3 for(var i=0;i<arr.length;i++){ 4 if(arr1.indexOf(arr[i])==-1){//arr的第i个元素是否已经保存进arr1,若保存过,跳过(即重复的元素不进数组);否则把当前项push到数组里面 5 arr1.push(arr[i]); 6 } 7 } 8 return arr1; 9 }
2. 判断一个字符串中出现次数最多的字符,并统计次数:
1 function getMaxLetter(){ 2 var obj={}; //保存拆分了的字符和出现次数 3 4 for(var i=0, l=str.length, k; i<l; i++){ 5 k = str.charAt(i); //将字符串中的各字符提取出来 6 if(obj[k]){ 7 obj[k]++; //字符的索引作为对象的值,若已出现过则进行++ 8 }else{ 9 obj[k] = 1; //若对象中无此元素则赋值1,说明出现1次 10 } 11 } 12 console.log(obj); 13 14 var m = 0; //出现最多的次数 15 var myArr = []; //用于保存字符串中出现相同数量的最多字符 16 17 for(var k in obj){ //for in遍历对象中的属性值(即各字符) 18 if( obj[k] >= m ){ //若有比最大值还大的,则重新赋值 19 if( obj[k] > m ){ 20 myArr = []; 21 } 22 myArr.push(k); //若相等,则将相同的字符存入数组 23 m = obj[k]; //获取次数 24 } 25 } 26 console.log('出现次数最多的字符是:' + myArr + ' ,出现的次数:' + m); 27 } 28 29 var str = "hello worlllllddddddd"; 30 getMaxLetter(str);