我们说我有一个这样的数组:
var arr1 = [ 1, 1, 'a', 'a' ];
我想删除重复项,这个片段很棒:
var deduped = arr1.filter(function (el, i, arr) {
return arr.indexOf(el) === i;
});
但我得到了这个数组,我想删除具有重复属性的对象:
var obj1 = {
name: "John",
id: 1
};
var obj2 = {
name: "Moe",
id: 1
};
var obj3 = {
name: "Jane",
id: 2
};
var arr2 = [obj1, obj2, obj3];
如何编写一个函数来删除(在这种情况下)obj1
或obj2
中的任何一个,因为它们具有相同的id
?
我不想删除这两个!
提前致谢。
答案 0 :(得分:3)
将Array#filter
与thisArg
thisArg
,执行回调时用作this
的值。
var obj1 = {
name: "John",
id: 1
};
var obj2 = {
name: "Moe",
id: 1
};
var obj3 = {
name: "Jane",
id: 'toString'
};
var arr2 = [obj1, obj2, obj3];
var filtered = arr2.filter(function(el) {
if (!this[el.id]) {
this[el.id] = true;
return true;
}
return false;
}, Object.create(null));
console.log(filtered);

答案 1 :(得分:1)
您可以使用紧凑版本的检查和分配给哈希对象。
var obj1 = { name: "John", id: 1 },
obj2 = { name: "Moe", id: 1 },
obj3 = { name: "Jane", id: 2 },
arr2 = [obj1, obj2, obj3],
filtered = arr2.filter(function(a) {
return !this[a.id] && (this[a.id] = true);
}, Object.create(null));
console.log(filtered);

答案 2 :(得分:1)
我们可以在
之前添加一个映射所有对象ID的步骤close: function(e){
//do something
}
答案 3 :(得分:0)
考虑到你有重复数字的数组
int a {1,2,3,4,5,5,6,4,7,1,2}
现在从这个名为a
的数组中选择最大的整数。例如,在这个数组中它是7。
现在创建一个名为b的新数组,其大小是数组a
中的最大数字。
int b[7]
现在开始遍历数组a
。从每个索引中选择数字,例如在数组的索引0处,它是1。现在转到数组b的索引1并检查是否写入0写入1并且如果已经在该索引上写入1则从数组a
中删除该数字。通过这种方式,您可以删除数组a
中的所有重复项。