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);
затем переменные в них
потом вложенные структуры
Вообще, лучше использовать всё самое лучшее из разных подходов и будет тебе счастье. Использовать исключительно один подход, имхо, это минус, а не плюс.
Кстати, наверное, неудобно все функции хранить в одном файле. Давайте сгруппируем их по модулям. Теперь у нас есть классы, поздравляю!
const connection = connect(createSocket('TCP'), ip, port);
const router = createRouter(routerParams, connection);
const request = prepareRequest(router);
const requestedUsers = json(get('/users', request, users));
const releasedRouter = releaseRouter(requestedUsers);
const relesedConnection = releaseConnection(releasedRouter);
releaseSocket(relesedConnection);
function countContiguousDistinct(k, arr) {
const numsCount = {};
for(let i = 0; i < k - 1; i++) {
const curr = arr[i];
numsCount[curr] = (numsCount[curr] ?? 0) + 1;
}
const result = [];
let count = Object.keys(numsCount).length;
for(let start = 0, end = k - 1; end < arr.length; start++, end++) {
const first = arr[start];
const last = arr[end];
numsCount[last] = (numsCount[last] ?? 0) + 1;
if(numsCount[last] === 1) {
count++;
}
result.push(count);
numsCount[first]--;
if(numsCount[first] === 0) {
count--;
}
}
return result;
}
Просто вы все говорите так будто С++ это бездонная яма, в которую если забраться, то уже не выберешься, а потому и лезть туда не стоит.