早上好,我有一个看起来像这样的数组:
[
{
"firstname": "John"
"lastname": "Doe",
"delegatesid":38
},
{
"firstname": "Jane"
"lastname": "Doe",
"delegatesid":5
},
....
我们姑且称之为itemsDelegates
。然后我有这个:
[
{
"id":2,
"addressesid":209411,
"delegatesid":38,
"role":0,
},
{
"id":3,
"addressesid":209411,
"delegatesid":45,
"role":0,
},
{
"id":4,
"addressesid":209411,
"delegatesid":50,
"role":0,
},
{
"id":5,
"addressesid":209411,
"delegatesid":5,
"role":0,
}
]
现在我们称之为 addressvisibility
。现在我试图从 itemsDelegates
中删除所有已经在 addressvisibility
中的条目。我尝试了以下方法:
this.itemsDelegates = response.data
var deletgates = this.itemsDelegates
this.items.addressvisibility.forEach(function(element){
deletgates.filter(element, (obj) => {
return obj.delegatesid != element.delegatesid
})
});
尽管如此,itemsDelegates
仍然包含所有条目。我的思维错误在哪里?
答案 0 :(得分:1)
filter
返回一个新数组,其中只包含符合给定条件的项目。它不会就地过滤数组。最简单的答案是重新分配数组的值,使得 delegates = delegates.filter(...)
.
不过,您也可以结合使用 addressvisibility.some
和 delegates.filter
:
delegates = delegates.filter(delegate =>
this.items.addressvisibility.some(av => av.delegatesid === delegate.delegatesid) === false
);
这将过滤掉 delegates
中 some
中有 addressvisibility
(一个或多个)且 delegatesid
匹配的所有项目。
答案 1 :(得分:0)
你快到了。但是请确保您的数组对象具有适当的逗号并且结构良好。我看到其中一些缺少逗号。
let a = [
{
"firstname": "John",
"lastname": "Doe",
"delegatesid":38
},
{
"firstname": "Jane",
"lastname": "Doe",
"delegatesid":5
}]
let b = [
{
"id":2,
"addressesid":209411,
"delegatesid":38,
"role":0,
},
{
"id":3,
"addressesid":209411,
"delegatesid":45,
"role":0,
},
{
"id":4,
"addressesid":209411,
"delegatesid":50,
"role":0,
},
];
let ans = a.filter((x) => {
let bIndex = b.findIndex((it) =>{
return it.delegatesid == x.delegatesid;
});
if(bIndex == -1) return true;
return false;
});
console.log(ans);
我正在根据第二个数组具有匹配的委托 ID 或不使用 findIndex 的条件过滤第一个数组。