spamboo
@spamboo
регулярки это не мое :(

Почему у меня всегда последний элемент массива?

let datat = ["текст1", "текст2", "текст3"];

for (let data of datat) {
	
const allLinksArr = [...document.querySelectorAll('a[href]')];
const linkt = allLinksArr.find(link => link.textContent.match(data))?.href;
const vihod = allLinksArr.find(link => link.textContent.match(/Выход в кабинет/))?.href;
if (linkt) { setTimeout(function() {	location.href = linkt;	}, 1000);	}	
if (vihod) { setTimeout(function() {	location.href = vihod;	}, 1000);	}

}


почему у меня при выполнении цикла берется всегда последний элемент ? вывожу по одному через алерт выводится нормально по одному по очереди. выполняю чтото с отдельным элемнетом масива у меня берется последний. что я делаю не так ?
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@mozenrat3
Проблема возникает потому, что вы используете функцию setTimeout внутри цикла, и каждый вызов setTimeout выполняется после завершения текущей итерации цикла. Когда цикл завершает свою работу, data принимает значение последнего элемента массива datat, и все асинхронные функции setTimeout захватывают это последнее значение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
07 мая 2024, в 13:07
7000 руб./за проект
07 мая 2024, в 12:59
500 руб./за проект
07 мая 2024, в 12:58
25000 руб./за проект