Hyperlinkv0.8.0-beta.28

Array

Array.filterMapconsteffect/Array.ts:3710
<A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (
  self: Iterable<A>
) => Array<B>
<A, B, X>(
  self: Iterable<A>,
  f: (input: A, i: number) => Result.Result<B, X>
): Array<B>

Keeps transformed values for elements where a Filter succeeds.

When to use

Use to filter an iterable with a Result-returning transformation while discarding failures.

Details

The filter receives (element, index). Failures are discarded.

Example (Filtering and transforming)

import { Array, Result } from "effect"

console.log(Array.filterMap([1, 2, 3, 4], (n) => n % 2 === 0 ? Result.succeed(n * 10) : Result.failVoid))
// [20, 40]
Source effect/Array.ts:371014 lines
export const filterMap: {
  <A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (self: Iterable<A>) => Array<B>
  <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<B>
} = dual(2, <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<B> => {
  const as = fromIterable(self)
  const out: Array<B> = []
  for (let i = 0; i < as.length; i++) {
    const result = f(as[i], i)
    if (Result.isSuccess(result)) {
      out.push(result.success)
    }
  }
  return out
})