13
Loops
Symptom
Imperative for/while loops obscuring what the loop is producing — filter, map, reduce mixed together by hand.
Goal
The transformation reads as a sequence of named operations: filter, map, reduce.
Smellier version
const seniors = [];
for (const u of users) {
if (u.age >= 65) seniors.push(u.name);
}Fresher versionconst seniors = users
.filter(u => u.age >= 65)
.map(u => u.name);Savings
Intent jumps off the page; bugs concentrate on individual steps that are independently testable.
Note
Reader must mentally execute the loop to learn the result; off-by-one errors and accumulator bugs hide in the body.