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

时间:2016-11-24 10:43:52

标签: javascript jquery arrays

我们说我有一个这样的数组:

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];

如何编写一个函数来删除(在这种情况下)obj1obj2中的任何一个,因为它们具有相同的id

我不想删除这两个!

JsFiddle

Reference for code snippet

提前致谢。

4 个答案:

答案 0 :(得分:3)

Array#filterthisArg

一起使用
  

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中的所有重复项。