Другое дело когда мы получаем его откуда то извне
const getIntersectionsFromString = (arr, searchStr) => {
const searchReg = new RegExp(searchStr, 'i');
return getIntersections(arr, searchReg);
}
const getIntersections = (arr, searchReg) => {
return arr.reduce((acc, v) => {
if(searchReg.test(v.name)) {
acc.push(v);
}
if(v.cities) {
acc.push(...getIntersections(v.cities, searchReg));
}
return acc;
}, []);
}
getIntersectionsFromString(arr, 'о').map(v => v.name);
затем переменные в них
потом вложенные структуры
Вообще, лучше использовать всё самое лучшее из разных подходов и будет тебе счастье. Использовать исключительно один подход, имхо, это минус, а не плюс.
Кстати, наверное, неудобно все функции хранить в одном файле. Давайте сгруппируем их по модулям. Теперь у нас есть классы, поздравляю!