urb*_*rbz 5 javascript arrays jquery
假设我有一个像这样的数组:
var arr1 = [ 1, 1, 'a', 'a' ];
Run Code Online (Sandbox Code Playgroud)
我想删除重复项,这个片段很棒:
var deduped = arr1.filter(function (el, i, arr) {
return arr.indexOf(el) === i;
});
Run Code Online (Sandbox Code Playgroud)
但我得到了这个数组,并且我想删除具有重复属性的对象:
var obj1 = {
name: "John",
id: 1
};
var obj2 = {
name: "Moe",
id: 1
};
var obj3 = {
name: "Jane",
id: 2
};
var arr2 = [obj1, obj2, obj3];
Run Code Online (Sandbox Code Playgroud)
如何编写一个函数来删除其中之一(在本例中)obj1
或obj2
因为它们具有相同的id
?
我不想删除两者!
提前致谢。
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);
Run Code Online (Sandbox Code Playgroud)