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