欢迎!从2017年开始,将慢慢的不在xmind上写总结了,全部转到博客中!这里将不再随便写写,将继承在xmind的精神,继续前行!!!

★ js 去除数组中重复的元素!!!

首先:这个问题的解决方式很多、、、、

第一种种思路是:遍历然后做比较

方式一: 常规模式

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>

 

posted @ 2016-12-02 18:22  拐进web的奋斗者  阅读(293)  评论(0编辑  收藏  举报