Чем можно заменить/как ускорить 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:37. |