Object.entries has existed since ES2017 and there was no way back, so any transformation of an object went through a reduce that nobody enjoys reading.
// before
const upper = Object.entries(obj).reduce((acc, [k, v]) => {
acc[k] = v.toUpperCase();
return acc;
}, {});
// ES2019
const upper = Object.fromEntries(
Object.entries(obj).map(([k, v]) => [k, v.toUpperCase()])
);
// and the one that comes up constantly
Object.fromEntries(new URLSearchParams(location.search));
The URLSearchParams case is worth memorising on its own — it replaces every hand-rolled query string parser. It accepts any iterable of pairs, so a Map converts directly. The caveat is that duplicate keys collapse to the last value, which for a query string with repeated parameters loses data silently; that is the one case where the manual loop is still correct.