【发布时间】:2013-10-30 08:29:17
【问题描述】:
我正在尝试找出一种有效的方法来从数组中删除重复的对象并寻找最有效的答案。我环顾互联网,一切似乎都在使用原始数据……或者无法针对大型阵列进行扩展。这是我当前的实现,可以改进并希望尽量避免使用标签。
Test.prototype.unique = function (arr, artist, title, cb) {
console.log(arr.length);
var n, y, x, i, r;
r = [];
o: for (i = 0, n = arr.length; i < n; i++) {
for (x = 0, y = r.length; x < y; x++) {
if (r[x].artist == arr[i].artist && r[x].title == arr[i].title) {
continue o;
}
}
r.push(arr[i]);
}
cb(r);
};
数组看起来像这样:
[{title: sky, artist: jon}, {title: rain, artist: Paul}, ....]
顺序无关紧要,但如果排序可以提高效率,那么我准备好迎接挑战了...
对于不知道 o 是标签的人来说,它只是说跳回循环而不是推送到新数组。
纯 javascript 请不要使用库。
到目前为止的答案:
【问题讨论】:
-
您的 Objects 对于 JSON 是否安全?
stringify他们可能是最快的并进行比较。 edit 这可能不是最适合您的,因为只有在以相同顺序定义属性时才能工作。 -
“尝试处理超过 1000 个结果时无法工作”是什么意思?会发生什么?
-
使用 jQuery! jQuery.unique(array)....... 哈哈 :) 说真的,如果你愿意,请参考源代码,看看他们是如何处理它的。
-
嵌套循环不是唯一性检查的最佳选择。使用属性名称为键的对象。
标签: javascript arrays algorithm sorting