Hyperlinkv0.8.0-beta.28

Record

Record.filterconsteffect/Record.ts:774
<K extends string, A, B extends A>(
  refinement: (a: NoInfer<A>, key: K) => a is B
): (
  self: ReadonlyRecord<K, A>
) => Record<ReadonlyRecord.NonLiteralKey<K>, B>
<K extends string, A>(predicate: (A: NoInfer<A>, key: K) => boolean): (
  self: ReadonlyRecord<K, A>
) => Record<ReadonlyRecord.NonLiteralKey<K>, A>
<K extends string, A, B extends A>(
  self: ReadonlyRecord<K, A>,
  refinement: (a: A, key: K) => a is B
): Record<ReadonlyRecord.NonLiteralKey<K>, B>
<K extends string, A>(
  self: ReadonlyRecord<K, A>,
  predicate: (a: A, key: K) => boolean
): Record<ReadonlyRecord.NonLiteralKey<K>, A>

Selects properties from a record whose values match the given predicate.

Example (Filtering record values)

import { Record } from "effect"
import * as assert from "node:assert"

const x = { a: 1, b: 2, c: 3, d: 4 }
assert.deepStrictEqual(Record.filter(x, (n) => n > 2), { c: 3, d: 4 })
filtering
Source effect/Record.ts:77430 lines
export const filter: {
  <K extends string, A, B extends A>(
    refinement: (a: NoInfer<A>, key: K) => a is B
  ): (self: ReadonlyRecord<K, A>) => Record<ReadonlyRecord.NonLiteralKey<K>, B>
  <K extends string, A>(
    predicate: (A: NoInfer<A>, key: K) => boolean
  ): (self: ReadonlyRecord<K, A>) => Record<ReadonlyRecord.NonLiteralKey<K>, A>
  <K extends string, A, B extends A>(
    self: ReadonlyRecord<K, A>,
    refinement: (a: A, key: K) => a is B
  ): Record<ReadonlyRecord.NonLiteralKey<K>, B>
  <K extends string, A>(
    self: ReadonlyRecord<K, A>,
    predicate: (a: A, key: K) => boolean
  ): Record<ReadonlyRecord.NonLiteralKey<K>, A>
} = dual(
  2,
  <K extends string, A>(
    self: ReadonlyRecord<K, A>,
    predicate: (a: A, key: K) => boolean
  ): Record<ReadonlyRecord.NonLiteralKey<K>, A> => {
    const out: Record<string, A> = empty()
    for (const key of keys(self)) {
      if (predicate(self[key], key)) {
        out[key] = self[key]
      }
    }
    return out
  }
)
Referenced by 1 symbols