@dgallyamshin

Как исправить ошибку в переборе массива?

Ребят, привет, написал такой код, при выборе Люберцы в двух инпутах все работает, а при выборе Дубно или Иваново не работает, хотя эти значения в одном и том же массиве. Помогите понять, в чем проблема.

И почему-то не все условия срабатывают, где допустил ошибку?

https://jsfiddle.net/p45jq83y/3/
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
WblCHA
@WblCHA
Да уж, в этом коде 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);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы