Remeda
If you’re greenfielding a JavaScript application, I can’t recommend enough starting with Remeda. The main reason here is that unlike lodash, Remeda is composable and functional, but unlike something like Ramda, you aren’t forced to use data last all the time. In the same breath:
const items = [1, 2, 3];
const doubled = R.map(items, (x) => x * 2);
const doubleSquared = R.pipe(
R.map((x) => x * 2),
R.map((x) => x ** 2),
);
It makes functional programming practical in the semi-functional style that works really well in modern TypeScript.