首页 > 解决方案 > 如何使用嵌套对象从数组中删除重复项

问题描述

我有一个数组,其中包含区域和位置。位置是数组中的另一个对象。例如:

let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}}]

在上面的示例中,区域可以有多个条目,但对于特定区域,只能有不同的位置。

例子:

let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}},
          {"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"def"}}, 
          {"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"ghi"}}]

但不能与同一地区有相同的位置。

let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}},
          {"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}} 
          ]

那么如何避免上述情况。如何从数组中删除这些条目。顺便说一下,下面的情况是可以接受的。

let arr= [{"regionId":1,"regionName:"xyz","location":{"locationId":1,"locationName":"abc"}},
          {"regionId":2,"regionName:"mno","location":{"locationId":1,"locationName":"abc"}} 
          ]

标签: javascriptarrays

解决方案


你可以使用 array.reduce.. 像这样的东西:

 let arr= [
      {regionId:1,regionName:"xyz",location:{locationId:1,locationName:"abc"}},
      {regionId:1,regionName:"xyz",location:{locationId:1,locationName:"def"}}, 
      {regionId:1,regionName:"xyz",location:{locationId:1,locationName:"ghi"}},
      {regionId:1,regionName:"xyz",location:{locationId:1,locationName:"abc"}},
      {regionId:1,regionName:"mno",location:{locationId:1,locationName:"abc"}}
    ];
    
    
    const reducedArr = arr.reduce((acc, cur) => {
      if(acc.length === 0) {
        acc.push(cur);
      }
    
      if(acc.findIndex((el) => el.regionName === cur.regionName && el.location.locationName === cur.location.locationName) > -1) {
        return acc;  
      }
      acc.push(cur);
      return acc;
    }, []);
    
    console.log(reducedArr);


推荐阅读