利用JS对象的特性去除数组中的重复项

数组去重的方法有很多,不同的方法的效率也不相同。本文介绍了另一种数组去重的方法:根据JS对象的特性去除数组中重复项的方法。

一、JS对象的特性(本文中所使用的特性):key始终唯一

引例:说明对象key值的唯一性,即当重新给js已有属性赋值的时候,实际上是覆盖了key,而不是新建了key

var t={name:'张三',age:20};//定义个js对象
console.log(t.name);//控制台输出:张三
//注意:此时对象t有两个属性:name、age

t.name='李四';
console.log(t.name);//控制台输出:李四
//注意:此时对象t依然有两个属性:name、age

二、数组去重步骤解析

分为两个步骤:

  1. 把要去重的数组转换成一个js的对象并返回。转换规则:把数组中的值变成js对象当中的key,然后value给任意值
  2. 把步骤1中的对象再还原成数组,对象的key作为数组中的元素。

三、数组去重实现

    var arr=[1,2,3,4,5,23,4,2,4,3];
    //1.把数组装换成对象,数组的元素作为对象的key,然后返回对象
    function toObject(ac_array){
        var obj={};//私有的对象
        for (var i=0;i<ac_array.length;i++) {
            obj[ac_array[i]] = true;
        }
        console.log(obj);//Object {1: true, 2: true, 3: true, 4: true, 5: true, 23: true}
        return obj;
    }
    //2.把对象的key获取出来作为数组的元素,然后返回数组
    function keys(ac_obj){
        var arr = [];
        for(var item in ac_obj){
            if(ac_obj.hasOwnProperty(item)){
                arr.push(item);
            }
        }
        console.log(arr);//["1", "2", "3", "4", "5", "23"]
        return arr;
    }
    //综合
    function uniq(ac_array){
        return keys(toObject(ac_array));
    }

    //测试
    var uniq_array=uniq(arr);
    console.log(uniq_array);//["1", "2", "3", "4", "5", "23"]

这种利用js对象key唯一性的特性进行数组去重的方法,在雅虎YUI框架的底层代码中也有用到哦,有兴趣的小火把可以去瞄瞄哦。

猜你喜欢

转载自blog.csdn.net/jingsi1991/article/details/52755140