Вы правы, что используете фильтр, и каждый медленнее. Это быстрее использовать только каждый цикл. По возможности оптимизируйте его, чтобы использовать меньше циклов.
Но это микрооптимизация. Это следует оптимизировать только тогда, когда оно «бесплатно» и не требует затрат на читаемый код. Лично я бы выбрал один или другой, основываясь на предпочтениях стиля / читабельности, а не на производительности.
Если у вас нет огромного набора элементов DOM, вы не заметите разницу (а если вы это сделаете, то у вас будут большие проблемы).
И если вы заботитесь об этой разнице, то вам не нужно использовать jQuery, потому что jQuery работает медленно.
Что вам нужно, это удобочитаемость и удобство обслуживания.
$(selector).filter(function() {
// get elements I care about
}).each(function() {
// deal with them
});
против
$(selector).each(function() {
// get elements I care about
if (condition) {
// deal with them
}
}
Независимо от того, что делает ваш код более читабельным и обслуживаемым, это оптимальный выбор. В качестве отдельного примечания фильтр намного более эффективен, если используется с .map
, чем при использовании с .each
.
Позвольте мне также отметить, что оптимизация от двух циклов к одному циклу оптимизирует от O(n)
до O(n)
. Это не то, о чем ты должен заботиться. В прошлом я также чувствовал, что «лучше» помещать все в один цикл, потому что вы делаете цикл только один раз, но это действительно ограничивает вас в использовании карты / уменьшения / фильтра.
Напишите значимый, самодокументированный код. Только оптимизируйте узкие места.