React 和 Javascript:从数组中删除重复值的问题

React & Javascript: Issues Removing Duplicate Values from Array

提问人:Azu 提问时间:11/10/2023 最后编辑:Azu 更新时间:11/10/2023 访问量:42

问:

我正在使用 react 和 Javascript 工作,并且有一个数组对象,如下所示:

const Regions = [
  { REGION_CODE: 'ABC', REGION_NAME: 'SOMEREGION1', OFFICES: [
    {OFFICE_CODE: 'ABD', OFFICE_NAME: 'SOMEOFFICE'},
     ... // Dozens of unique entries for this region
  ]},
  { REGION_CODE: 'ABD', REGION_NAME: 'SOMEREGION2', OFFICES: [
    {OFFICE_CODE: 'CDF', OFFICE_NAME: 'SOMEOFFICE2'}
     ... // Dozens of unique entries for this region
  ]},
  ... // several similar entries
]

我对数组的问题是,几个区域条目的办公室与其他区域共享办公室代码。最终目标是,当选择“所有区域”时,我有一个搜索过滤器,列出所有唯一的办公室代码。但是,尽管我已经搜索了其他问答,但我未能删除重复项。

我尝试了以下方法:

//Variant 1
const Offices = []
Regions.forEach(region => {
  region.OFFICES.forEach(office => {
    if(!Offices.includes(office)) {
      Offices.push(office)
    }
  }
});

//Variant 2
const Offices = []
Regions.forEach(region => {
  region.OFFICES.forEach(office => {
    if(Offices.indexOf(office) === -1) {
      Offices.push(office)
    }
  }
});

//Variant 3
const Offices = []
Regions.forEach(region => {
  region.OFFICES.forEach(office => {
    Offices.push(office)
  }
});
const UniqueOffices = Array.from(new Set(Offices));

根据我的理解,上述所有“应该”都有效,但我得到的结果总是相同的,它只是给我所有条目,而不仅仅是唯一的条目。我什至尝试使用地图版本,但我几乎可以肯定我误解了某些东西。当我将数组简化为类似

const item = [ 'a', 'b', 'c', 'd', 'c', 'a']

const item = [ 1, 2, 3, 3, 2, 4 ]

以上似乎没有任何问题......

有谁知道我做错了什么?关于如何解决此问题的任何建议?任何协助将不胜感激。

javascript java reactjs 数组

评论

0赞 Azu 11/10/2023
在此处添加此内容,直到编辑限制时间期限到期:我想明确指出,共享办公室代码也共享相同的办公室名称

答:

1赞 Valentin 11/10/2023 #1

Array.includes(和 ) 仅检查对象的引用相等性。这意味着以下表达式将始终为 false:Array.indexOf

{} == {}

因为每次都会使用不同的引用创建一个新对象。{}

为了使你的代码工作,你需要比较每个办公室,你可以通过使用或像这样来做到这一点:OFFICE_CODEArray.someArray.find

const Regions = [{
    REGION_CODE: 'ABC',
    REGION_NAME: 'SOMEREGION1',
    OFFICES: [{
        OFFICE_CODE: 'ABD',
        OFFICE_NAME: 'SOMEOFFICE'
      },
      // Dozens of unique entries for this region
    ]
  },
  {
    REGION_CODE: 'ABD',
    REGION_NAME: 'SOMEREGION2',
    OFFICES: [{
        OFFICE_CODE: 'CDF',
        OFFICE_NAME: 'SOMEOFFICE2'
      }, {
        OFFICE_CODE: 'ABD',
        OFFICE_NAME: 'SOMEOFFICE'
      }
      // Dozens of unique entries for this region
    ]
  },
  // several similar entries
];

const Offices = [];
Regions.forEach(region => {
  region.OFFICES.forEach(newOffice => {
    if (!Offices.some(office => office.OFFICE_CODE === newOffice.OFFICE_CODE)) {
      Offices.push(newOffice)
    }
  });
});

console.log(Offices);

const Offices2 = [];
Regions.forEach(region => {
  region.OFFICES.forEach(newOffice => {
    if (!Offices2.find(office => office.OFFICE_CODE === newOffice.OFFICE_CODE)) {
      Offices2.push(newOffice)
    }
  });
});

console.log(Offices2);

评论

0赞 Azu 11/11/2023
你真棒!谢谢,这得到了我想要的东西。非常感谢