Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从对象数组中删除重复项?_Javascript - Fatal编程技术网

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

Javascript 如何从对象数组中删除重复项?,javascript,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} ]; 注:键(a、b、c)只有基本数据类型(字符串、数字) 请不要使用下划线.js和其他lib。我相信有更好的方

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

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}
];
注:键(a、b、c)只有基本数据类型(字符串、数字)


请不要使用下划线.js和其他lib。

我相信有更好的方法来实现这一点,但您可以使用这个原型函数

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;
}
注:
对于大型阵列,您应该避免这种情况,因为有更好的解决方案

cs发生了什么?还有,顺序重要吗?最后。。。为什么不使用下划线?您的相等函数是什么?例如,两个物体相互复制意味着什么?你认为没有人会改变这个数组的元素吗?@Dancrumb,我不想在我的项目中使用下划线.js,因为没有任何理由,你可以在没有o的情况下重写你的示例吗?@Robbin:我认为更好的办法是重写代码。提示:在循环中使用一点(值0或1)应该避免多大的数组,我一直在寻找,任何人都有链接或可以提出更好的解决方案,我也有同样的问题,但数组中有几千个对象需要处理…@Lion789:在这种情况下,你需要研究算法,顺便说一句,也许还需要一些启发式算法,使用上述原型,您将如何删除重复项并合并两个或多个阵列?
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);