Hacker News new | ask | show | jobs
by nefitty 1584 days ago
I basically rely on map 80% of the time for iteration. I do have to spend some mental cycles on deciding where to go if I needed to break or skip elements. That was until I discovered the beautiful .flatMap() trick of returning an empty array to skip or exclude an index item.

Is it bad to use map?

2 comments

I see people use JavaScript Array.map a lot when they aren't doing anything with the returned array, which I find kind of irritating.

So if you're using map sensibly, no there's nothing wrong. But I don't like the dogma I read a lot which is "use map always" because it leads to inexperience developers using it in the wrong circumstances.

Does JS have something like array.iter?
What are you struggling with when trying to skip elements?

> Is it bad to use map?

No.

Whether to use a for loop or for of or forEach or map().filter() etc

flatMap takes care of a lot of that

Why are you using a “trick” to skip an element in some structure when mapping a function over it?

For posterity (and forgive me if this JavaScript syntax is inaccurate; I don't write it so much these days)…

    xs.map(a => shouldBeSkipped ? a : f(a))
They don't want to keep the unmapped value in the resulting collection at all. flatMap allows for removal of an element in one traverse, unlike filter+map with eager behaviour.
Then why not just use a fold?
Sure, there's many ways to skin a cat. Given the option, I wouldn't choose either of these, and instead use something like filterMap[1] which I think conveys intent better than a fold or flatMap.

Btw, I'm assuming that the original map questioner wasn't solely using flatMap for side-effectful iteration, which reading again, I'm a bit suspicious about.

1: https://gcanti.github.io/fp-ts/modules/Array.ts.html#filterm...