I have like this addresses list:
const addresses = [
{
id: 1,
address: "St. East Baltimore, 820",
district: [
{
id: 1,
title: "Mfume"
}
]
},
{
id: 2,
address: "St. Darnestown Rd, 12187",
district: [
{
id: 7,
title: "Trone"
}
]
},
{
id: 3,
address: "St. Elm Street",
district: [
{
id: 4,
title: "Raskin Sarbanes"
}
]
},
{
id: 4,
address: "St. Bethesda Ave",
district: [
{
id: 12,
title: "Rayburn House"
}
]
},
{
id: 5,
address: "St. Bethesda Lane, 7111",
district: [
{
id: 2,
title: "Connolly"
}
]
},
{
id: 6,
address: "St. Trolls Toys, 643",
district: [
{
id: 8,
title: "Beyer"
}
]
},
{
id: 7,
address: "St. Houlton, 12",
district: [
{
id: 45,
title: "Lee Zeldin House"
}
]
},
];
I need to search string by address and by district. I do it like this:
const searchQuery = "Be"
const regex = new RegExp('^' + searchQuery, 'i');
const searchByAddress = addresses.filter((addr) => {
return addr.address.replace("St. ", '').trim().search(regex) == 0;
});
const searchByDistrict = addresses.filter((addr) => {
return addr.district[0].title.search(regex) == 0;
});
var result = []
result.push(searchByAddress)
searchByDistrict.map(item => {
const found = result.some(el => el.id === item.id);
if(!found) {
result.push(item);
}
})
console.log("Result: ", result)
Maybe anyone have better idea to search and get needed objects in my case? In my case it's work slow. Maybe this code can be performed?
Here is the demo of my solution:
const addresses = [{
id: 1,
address: "St. East Baltimore, 820",
district: [{
id: 1,
title: "Mfume"
}]
},
{
id: 2,
address: "St. Darnestown Rd, 12187",
district: [{
id: 7,
title: "Trone"
}]
},
{
id: 3,
address: "St. Elm Street",
district: [{
id: 4,
title: "Raskin Sarbanes"
}]
},
{
id: 4,
address: "St. Bethesda Ave",
district: [{
id: 12,
title: "Rayburn House"
}]
},
{
id: 5,
address: "St. Bethesda Lane, 7111",
district: [{
id: 2,
title: "Connolly"
}]
},
{
id: 6,
address: "St. Trolls Toys, 643",
district: [{
id: 8,
title: "Beyer"
}]
},
{
id: 7,
address: "St. Houlton, 12",
district: [{
id: 45,
title: "Lee Zeldin House"
}]
},
];
const searchQuery = "Be"
const regex = new RegExp('^' + searchQuery, 'i');
const searchByAddress = addresses.filter((addr) => {
return addr.address.replace("St. ", '').trim().search(regex) == 0;
});
const searchByDistrict = addresses.filter((addr) => {
return addr.district[0].title.search(regex) == 0;
});
var result = []
result.push(searchByAddress)
searchByDistrict.map(item => {
const found = result.some(el => el.id === item.id);
if (!found) {
result.push(item);
}
})
console.log(result);