删除数组中具有重复属性的对象

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)

如何编写一个函数来删除其中之一(在本例中)obj1obj2因为它们具有相同的id

我不想删除两者!

JsFiddle

代码片段参考

提前致谢。

Ray*_*yon 7

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)