Vue 通过另一个数组过滤一个数组

时间:2021-06-09 03:58:46

标签: javascript vue.js

早上好,我有一个看起来像这样的数组:

[
   {
      "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 仍然包含所有条目。我的思维错误在哪里?

2 个答案:

答案 0 :(得分:1)

filter 返回一个新数组,其中只包含符合给定条件的项目。它不会就地过滤数组。最简单的答案是重新分配数组的值,使得 delegates = delegates.filter(...).

不过,您也可以结合使用 addressvisibility.somedelegates.filter

delegates = delegates.filter(delegate =>
    this.items.addressvisibility.some(av => av.delegatesid === delegate.delegatesid) === false
);

这将过滤掉 delegatessome 中有 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 的条件过滤第一个数组。