Основываясь на предложении Пойнти в его комментарии, я сбросил console.log
в обратный вызов фильтра. В приведенном ниже примере я сделал еще один шаг и использовал некоторую переменную count, чтобы убедиться, что она не переоценивает функцию фильтра на каждой итерации. Если бы это было так, я ожидал бы значение 6 (3 элемента в массиве, умноженное на 2 сопоставленных элемента)
const groups = [{ name: 'Sean', type: 'A' },
{ name: 'Jen', type: 'A' },
{ name: 'Tom', type: 'B'}]
let cnt = 0
for(const group of groups.filter(g => {
console.log("I am here")
cnt += 1
return g.type === 'A'
})) {
document.getElementById("count1").value = cnt
}
cnt = 0
const filteredGroup = groups.filter(g => {
console.log("I am here")
cnt += 1
return g.type === 'A'
})
for(const group of filteredGroup) {
document.getElementById("count2").value = cnt
}
<div>
<label>Filter inline with for loop</label>
<input type="text" id="count1" />
<br />
<br />
<label>Filter set outside of loop</label>
<input type="text" id="count2" />
<br />
</div>
Это, кажется, подтверждает некоторые комментарии и ответ RK_15, который заключается в том, что он не переоценивает фильтр внутри for
цикла.