【javascript】——数组去重 ,要求在原型链上编程

Array.prototype.unique = function() {
  var temp = {},
    result = [],
    len = this.length;
  for (var i = 0; i < len; i ++) {
    if(!temp[this[i]]) {          
      temp[this[i]] = 'abc';    //属性值可随意
      result.push(this[i]);
    }
  }
  return result;
}

 

 将数组的元素作为对象属性的属性名,若对象属性不存在,则创建相应的属性名,并附以任意属性值,当遇到相同的数组元素时,就会跳过,最终对象的属性名就组成去重后的数组。

 

下面来举例:

  数组  a = [1, 5, 1, 7, 5];

  对象   obj= {}

  返回的数组 : temp = []

  (1) 将  1  作为对象的属性名,判断属性名是否存在,不存在,则 :  obj= {                                   temp = [1]

                                    1 : 'abc',

                                   }

   

  (2) 将  5  作为对象属性名,判断属性名是否存在,不存在,,则 :  obj= {                                     temp = [1, 5]

 

                                    1 : 'abc',

                                    5 :'abc',

 

                                  }

 

  

     (3) 将  1   作为对象属性名,判断属性名是否存在,存在,则 :  obj= {                                          temp = [1, 5]

 

                                    1 : 'abc',

 

                                    5 :'abc',

 

                                    }

 

         

   (4) 将  7   作为对象属性名,判断属性名是否存在,不存在,则 :  obj= {                                          temp = [1, 5, 7]

 

                                    1 : 'abc',

 

                                    5 :'abc',

                                    7 :'abc',

 

                                    }

        

        (5) 将  5   作为对象属性名,判断属性名是否存在,存在,则 :  obj= {                                          temp = [1, 5, 7]

                                    1 : 'abc',

                                    5 :'abc',

                                    7 :'abc',

                                    }

 

       所以最终去重得到的数组为 :   temp = [1, 5, 7]

 

posted @ 2020-01-05 06:47  shumeihh  阅读(406)  评论(0编辑  收藏  举报