Чем можно заменить/как ускорить forEach внутри forEach?
Приветствую.
Подскажите, можно ли как-то ускорить этот код? Массив array может быть довольно-таки большим и постоянно увеличивается, вызов forEach на каждый его элемент рано или поздно приведет к большим задержкам. const array = ['Заголовок1', 'Заголовок2']; const arr = [...document.querySelectorAll(".visit-link"), ...document.querySelectorAll(".target-link > a")]; array.forEach((myList) => { arr.forEach((el) => { if(myList == el.innerText) { el.closest('.top-item-row').remove(); } }) }); |
Fortun,
по скорости надо смотреть const array = ['Заголовок1', 'Заголовок2']; const link = document.querySelectorAll(".visit-link, .target-link > a"); link.forEach(el => { if (array.includes(el.innerText)) { el.closest('.top-item-row').remove(); } }) |
Цитата:
Но если заменить forEach() на обычный цикл - это так же даст прирост по скорости. Цитата:
const o = {'Заголовок1': 1, 'Заголовок2': 1} Тогда даже Цитата:
if (o.[el.innerText]) {} На больших количествах это так же может дать ускорение... |
Если у вас увеличивается только первый массив, а второй (с элементами) остается неизменным, то есть смысл попробовать составить карту innerText => [...(.top-item-row)] и работать с ней.
const elements = [...document.querySelectorAll('.visit-link, .target-link > a')]; const elementsMap = {}; let item; while (item = elements.shift()) { elementsMap[item.innerText] ??= []; elementsMap[item.innerText].push( item.closest('.top-item-row') ); } function removeRows(titles) { for (let i = 0; i < titles.length; i++) { const list = elementsMap[titles[i]]; if (!list) { continue; } for (let j = 0; j < list.length; j++) { list[j].remove(); } delete elementsMap[titles[i]]; } } removeRows(['Заголовок1', 'Заголовок2']); |
Всем спасибо, буду пробовать!
P.S. Забавно. В свое время (2013 год) я этот аккаунт зарегистрировал, потому что мне был интересен js и я для себя делал всякие скрипты на сайтах через tampermonkey. Прошло 9 лет. Я таки перешел в программисты, уже два года опыта, разобрался во vue, участвовал в крупных проектах, и вот решил модифицировать один из своих старых скриптов. Улучшений оказалось очень много, но оказалось что вот с циклами я до сих пор не особо дружу, хех, ну вот не сталкивался я с ними в реальной работе, увы :) (но видели бы вы как это место выглядело до рефакторинга, ууу.... Даже жаль что я не сохранил старый код) Как же время летит.... |
Часовой пояс GMT +3, время: 20:27. |