提问人:Azu 提问时间:11/10/2023 最后编辑:Azu 更新时间:11/10/2023 访问量:42
React 和 Javascript:从数组中删除重复值的问题
React & Javascript: Issues Removing Duplicate Values from Array
问:
我正在使用 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 ]
以上似乎没有任何问题......
有谁知道我做错了什么?关于如何解决此问题的任何建议?任何协助将不胜感激。
答:
1赞
Valentin
11/10/2023
#1
Array.includes
(和 ) 仅检查对象的引用相等性。这意味着以下表达式将始终为 false:Array.indexOf
{} == {}
因为每次都会使用不同的引用创建一个新对象。{}
为了使你的代码工作,你需要比较每个办公室,你可以通过使用或像这样来做到这一点:OFFICE_CODE
Array.some
Array.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
你真棒!谢谢,这得到了我想要的东西。非常感谢
下一个:无法更新上次构建.bin
评论