【发布时间】:2015-03-06 15:44:25
【问题描述】:
我有以下情况:
有未定义数量的数组。每个数组包含一些对象。这些对象中的每一个都有一个id 元素以及其他一些元素。
//Example objects:
f = [{'id': 1, 'name': 'a'}, {'id': 2, 'name': 'b'},
{'id': 3, 'name': 'c'}, {'id': 1, 'name': 'd'}, ...]
g = [{'id': 2, 'name': 'e'}, {'id': 4, 'name': 'f'},
{'id': 3, 'name': 'g'}, {'id': 4, 'name': 'h'}, ...]
h = ...
i = ...
我想过滤掉所有重复项,不仅在每个单独的数组中,而且在不同的数组中。
编辑:如果两个对象的id 元素相同,则它们是重复的。优先级无关紧要,第一次出现就可以了。
我想出了以下功能:
function uniqueObjects() {
var seen = [];
for (var i=0; i<arguments.length; i++) {
var arg = arguments[i];
for (var j=0; j<arg.length; j++) {
var elm = arg[j];
var key = elm['id'];
if (seen.indexOf(key) > -1) {
arg.pop(elm);
} else {
seen.push(key);
}
}
}
return arguments;
}
但这似乎无法正常工作,因为我得到了以下值:
{'0': [{'id': 1, 'name': 'a'},
{'id': 2, 'name': 'b'},
{'id': 3, 'name': 'c'}],
'1': [{'id': 2, 'name': 'e'},
{'id': 4, 'name': 'f'}]}
【问题讨论】:
-
你能把这个放在小提琴里吗?
-
如何定义“重复”?相同的
id还是相同的所有属性? -
你想如何过滤掉重复项,是什么给了总统:第一次出现的 id 比最后一次更重要吗?是否依赖于name的值?
标签: javascript arrays filter