与 angular 8 中的另一个数组对象进行比较时,如何单独过滤不匹配的数组元素

How can i filter the un matched array elements alone when compare with another array objects in angular 8

我有两个数组响应,我想比较这两个响应并且必须将不匹配的数组元素过滤到新的数组对象中。

比较两个响应和过滤器的条件是: codenumber不完全匹配时,我们必须过滤使用响应 2 然后我们必须将这样的数组元素过滤到我需要作为输出的新数组对象中。

响应二示例中的数组元素也出现在数组一示例的响应中,我不想要,我需要过滤与数组一的响应不匹配的数组元素。

我们从响应 2 数组中筛选出的最终输出如下所示,与响应 1 数组对象不匹配:

{
  "unmatchedArrayRes": [
    {
      "code": "08",
      "number": "2323232323",
      "id": "432",
      "value": "value432"
    }
  ]
}

阵列一的响应

{
   "MainData": [
       {
           "DataResponseOne": [
               {
                   "viewData": {
                       "number": "11111111111111",
                       "code": "01"
                   },
                   "name": "viewDataOne"
               },
               {
                    "viewData": {
                        "number": "22222222222222",
                        "code": "01"
                    },
                    "name": "viewDataTwo"
                },
                {
                    "viewData": {
                        "number": "3333333333333",
                        "code": "02"
                    },
                    "name": "viewDataThree"
                }
           ]
       },
       {
            "DataResponseTwo": [
                {
                    "viewData": {
                        "number": "5555555555555",
                        "code": "9090"
                    },
                    "name": "viewDataFour"
                },
                {
                    "viewData": {
                        "number": "6666666666666",
                        "code": "01"
                    },
                    "name": "viewDataFive"
                },
                {
                    "viewData": {
                        "number": "8888888888888",
                        "code": "01"
                    },
                    "name": "viewDataSix"
                }
            ]
        }
   ]
}

响应二示例:

{
  "compareRes": [
    {
      "code": "01",
      "number": "11111111111111",
      "id": "123",
      "value": "value123"
    },
    {
      "code": "9090",
      "number": "5555555555555",
      "id": "345",
      "value": "value567"
    },
    {
      "code": "08",
      "number": "2323232323",
      "id": "432",
      "value": "value432"
    }
  ],
  "metaData": "343434343434"
}

首先,创建一个包含响应 1 中所有视图项的组合列表。

const combinedList = [];

res1["MainData"].forEach(data => {
    // console.log(data);
    for( let key in data) {
      // console.log(key);
      data[key].forEach(innerData => {
        console.log(innerData)
        combinedList.push(innerData["viewData"]);
      })
    }
  });

在上面的方法中,它以这样的方式完成,它可以处理多个 viewData 响应,如 DataResponseOne、DataResponseTwo 等。

然后像这样过滤第二个响应项目:

const unfilteredListItems = res2["compareRes"].filter(data => {
    return !combinedList.some(listItem => {
      return listItem.code === data.code && listItem.number === data.number;
    });
  });

  console.log(unfilteredListItems);

工作 Stackblitz link:https://stackblitz.com/edit/ngx-translate-example-aq1eik?file=src%2Fapp%2Fapp.component.html