无法删除重复的项目

时间:2019-01-29 12:15:26

标签: javascript

我有以下两个数组:

原始

[
   { id: "1"},
   { id: "2"},
   { id: "3"}
]

[
   { id: "1"},
   { id: "7"},
   { id: "9"}
]

我正在尝试从old中删除original中所有可用的项目,所以我这样做了:

original = original.filter(function(el) {
                    return old.indexOf(el) < 0;
                }.bind(this));

但是我得到相同的物品,我做错了什么? 这是代码段。

let original = [{
    id: "1"
  },
  {
    id: "2"
  },
  {
    id: "3"
  }
];

let old = [{
    id: "1"
  },
  {
    id: "7"
  },
  {
    id: "9"
  }
];
console.log(original);

original = original.filter(function(el) {
  return old.indexOf(el) < 0;
}.bind(this));

console.log(original);

4 个答案:

答案 0 :(得分:1)

  var original = [
   { id: "1"},
   { id: "2"},
   { id: "3"}
  ],
  old = [
     { id: "1"},
     { id: "7"},
     { id: "9"}
  ];

  var result = original.filter(function(obj) { return old.every(function(obj2) { return obj.id != obj2.id;}) });

console.log(result)

这将返回:2,3

答案 1 :(得分:1)

indexOf无法比较对象的内容。

您需要检查id

var original = [
   { id: "1"},
   { id: "2"},
   { id: "3"}
  ],
  old = [
     { id: "1"},
     { id: "7"},
     { id: "9"}
  ];


original = original.filter(function(el) {
  return old.findIndex(item => item.id === el.id) < 0;
});

console.log(original);

答案 2 :(得分:1)

您可以将Set与不需要的id一起使用并过滤数组。

var array = [ { id: "1" }, { id: "2" }, { id: "3" }],
    old = [{ id: "1" }, { id: "7" }, { id: "9" }],
    oldSet = new Set(old.map(({ id }) => id));
    
array = array.filter(({ id }) => !oldSet.has(id));

console.log(array);

答案 3 :(得分:1)

使用过滤器和forEach

var old=[
   { id: "1"},
   { id: "2"},
   { id: "3"}
]


var original=[
   { id: "1"},
   { id: "7"},
   { id: "9"}
]
var obj=[];
old.forEach((e)=>obj.push(e.id))
console.log(original.filter((e)=>!obj.includes(e.id)?true:false))