Да уж, в этом коде DRY расчленили самыми жестокими методами...
Собственно, место проблемы:
for (let el = 0; el < moscowCity.length; el++) {
if (secondCity === moscowCity[el].city) {
secondMoscowOrNot = "moscow-city"
} else if (secondCity != moscowCity[el].city) {
secondMoscowOrNot = "not-moscow-city"
}
}
for (let le = 0; le < moscowCity.length; le++) {
if (firstCity === moscowCity[le].city) {
firstMoscowOrNot = "moscow-city"
} else if (firstCity != moscowCity[le].city) {
firstMoscowOrNot = "not-moscow-city"
}
}
Во-первых, ужасные значения firstMoscowOrNot и secondMoscowOrNot, как и названия. Должно быть isFirstMoscowCity и isSecondMoscowCity (по факту и они в таком виде так себе, но всё же) с типом булин, естественно, а не "not-moscow-city".
Во-вторых, эта конструкция в целом нафиг не нужна.
И в-третьих, что и ломало всё, какие условия выхода из цикла? Цикл проходит полностью, даже если нашёл совпадение, и в итоге перезаписывает значение.
Короче говоря, должно быть так:
const isFirstMoscowCity = moscowCity.some((c) => firstCity === c.city);
const isSecondMoscowCity = moscowCity.some((c) => secondCity === c.city);