js 巧妙去除数组中的重复项

1、代码如下:

var toObject = function(a) { 
  var o = {}; 
  for (var i=0, j=a.length; i<j; i=i+1) { // 这里我调整了下, YUI源码中是i<a.length 
    o[a[i]] = true; 
  } 
  return o; 
} 
var keys = function(o) { 
  var a=[], i; 
  for (i in o) { 
    if (o.hasOwnProperty(i)) { // 这里, YUI源码中是lang.hasOwnProperty(o, i) 
      a.push(i); 
    } 
  } 
return a; 
} 
var uniq = function(a) { 
  return keys(toObject(a)); 
}

实现方法原理:

(1). 先以目标数组的值为key生成一个对象. 这一步是最核心的: 因为在一个对象中, key是无法重复的, 这样就很巧妙的排除了重复值; 

(2). 遍历生成的对象, 将这些key取出来放到一个数组中, OK, 到此就大功告成了!(简单吧, 只需两步就行) 

ps:

该方法只适用于数组项为字符串, 数字的一维数组。对于二维数组的排重,就更复杂,暂时管不了那么多了!

2、一般的实现方式

Array.prototype.unique = function() {
    var a = this.concat();
    for(var i=0; i<a.length; ++i) {
        for(var j=i+1; j<a.length; ++j) {
            if(a[i] === a[j])
                a.splice(j, 1);
        }
    }

    return a;
};
原文地址:https://www.cnblogs.com/chendc/p/5523619.html