我有以下两个数组:
原始
[
{ 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);
答案 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))