1

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

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 和其他库。

4

1 回答 1

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);

笔记:

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

于 2013-01-31T21:04:39.097 回答