如何从对象数组中删除重复项?

时间:2013-01-31 19:40:04

标签: javascript

从对象数组中删除重复项的最佳方法是什么?

var array = [
  {a: 0, b: 0, c: 0},
  {a: 0, b: 0, c: 0},

  {a: 1, b: 1, c: 1},
  {a: 1, b: 1, c: 1},

   //..... etc
];

而且,我希望得到:

[
  {a: 0, b: 0, c: 0},
  {a: 1, b: 1, c: 1}
];

PS:键(a,b,c)只有原始数据类型(String,Number)

请不要使用underscore.js和其他库。

1 个答案:

答案 0 :(得分:2)

我确信有更好的方法可以做到这一点,但你可以使用这个原型功能。

Array.prototype.removeDuplicates = function () {
    var r = new Array();
    o:for(var i = 0, n = this.length; i < n; i++)
    {
        for(var x = 0, y = r.length; x < y; x++)
            if(r[x].a==this[i].a && r[x].b==this[i].b && r[x].c==this[i].c)
                continue o;
        r.push(this[i]);
    }
    return r;
}

如何使用

var arr = [
  {a: 0, b: 0, c: 0},
  {a: 0, b: 0, c: 0},
  {a: 1, b: 1, c: 1},
  {a: 1, b: 1, c: 1},

   //..... etc
];
var uniques = arr.removeDuplicates();
console.log(uniques);

注意:

对于大型阵列,你应该避免这种情况,有更好的解决方案