首先:这个问题的解决方式很多、、、、
第一种种思路是:遍历然后做比较
方式一: 常规模式
1.构建一个新的临时数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与临时数组对比
3.若临时数组中没有该元素,则存到临时数组中
完整的案例 <script> var arr =[33,1,1,2,38,5,9,6,5,11,56,55,665,44,55,55,88,44,1] Array.prototype.unique = function(){ var newarr = [this[0]];//设置新数组,并将原数组的第一个值给附近去 //alert(newarr) for( var i = 0; i < this.length; i++){ var repeat = false;//设置重复的 参数 for(var k =0; k<newarr.length; k++){ if(this[i] == newarr[k]){ repeat = true;//重复设置为ture; break; } } //将不重复的元素放进新的数组中 if(!repeat){ newarr.push(this[i]); } } //返回新的数组 return newarr; }; alert(arr.unique()); </script>
方式二: 使用了默认Js数组sort默认排序,是按ASCII进行排序;
1.先将当前数组进行排序
2.检查当前中的第i个元素 与 临时数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中
<script> var arr =[33,1,1,2,38,5,9,6,5,11,56,55,665,44,55,55,88,44,1] Array.prototype.unique = function(){ this.sort()//按照ASCII排序 var newarr = [this[0]];//设置新数组,并将原数组的第一个值给附近去 for(var i = 0 ; i<this.length; i++){ if(this[i] != newarr[newarr.length-1]){ newarr.push(this[i]);//排序后,将每一个元素与新数组的最后一个做比较。如果不同,那么就存进去 } } //返回新的数组 return newarr; }; //console.log(JSON.stringify(arr.unique()));[1,11,2,33,38,44,5,55,56,6,665,88,9] alert(arr.unique());//输出[1,11,2,33,38,44,5,55,56,6,665,88,9] 输出的结果是受排序影响的。 </script>
感觉比第一个方法简单----用到排序
方式三: <推荐>利用json对象是否有属性值
1.创建一个新的数组存放结果
2.创建一个空对象json
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。对象属性的运用!!
<script> var arr =[33,1,1,2,38,5,9,6,5,11,56,55,665,44,55,55,88,44,1] Array.prototype.unique = function(){ var newarr=[]; var json = {}; for(var i =0; i< this.length;i++){ if(!json[this[i]]){//这里值得注意。之前还这真不知道这样处理、、、、、 newarr.push(this[i]); json[this[i]]=1; } } //console.log(JSON.stringify(json)); //返回新的数组 return newarr; }; console.log(JSON.stringify(arr.unique())); alert(arr.unique());//输出[1,11,2,33,38,44,5,55,56,6,665,88,9] 输出的结果是受排序影响的。 </script>
第二种思路是:把目标数组arr的元素值和键的位置调换 自动就把重复的元素给删除掉了,
<script type="text/javascript"> var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; function unique(arr){ var tmp = new Array(); for(var m in arr){ tmp[arr[m]]=1; } //再把键和值的位置再次调换 var tmparr = new Array(); for(var n in tmp){ tmparr.push(n); } return tmparr; } alert(unique(student)) </script>
总结:
1.新函数 push,sort
1.1push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
注释:该方法会改变数组的长度。
提示:要想数组的开头添加一个或多个元素,请使用 unshift() 方法。
1.2sort() 方法用于对数组的元素进行排序。
arrayObject.sort(sortby) 参数可选,必须是函数。
2.数组原型上添加方法。
<script> var arr =[33,1,1,2,38,5,9,6,5,11,56,55,665,44,55,55,88,44,1] Array.prototype.unique = function(){ var newarr = [this[0]];//设置新数组,并将原数组的第一个值给附近去 alert(newarr) } arr.prototype.unique();// 没效果唉! arr.unique();//执行输出 33 原型--- </script>
Tip:原型方法的调用。
arr.prototype.unique();// 没效果唉!
arr.unique();//执行输出 33 原型---
3.定义一个空的对象。采用类似数组的方式添加内容。
<script type="text/javascript"> var jsons={}; jsons[2]=1;//竟然是以这样的方式可以添加。。 console.log(JSON.stringify(jsons)) //{"2":1} </script>