std/collections/filter_values.ts

52 lines
1.2 KiB
TypeScript

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// This module is browser compatible.
/**
* Returns a new record with all entries of the given record except the ones
* that have a value that does not match the given predicate.
*
* @typeParam T The type of the values in the input record.
*
* @param record The record to filter values from.
* @param predicate The function to test each value for a condition.
*
* @returns A new record with all entries that have a value that matches the
* given predicate.
*
* @example Basic usage
* ```ts
* import { filterValues } from "@std/collections/filter-values";
* import { assertEquals } from "@std/assert";
*
* const people = {
* Arnold: 37,
* Sarah: 7,
* Kim: 23,
* };
* const adults = filterValues(people, (person) => person >= 18);
*
* assertEquals(
* adults,
* {
* Arnold: 37,
* Kim: 23,
* },
* );
* ```
*/
export function filterValues<T>(
record: Readonly<Record<string, T>>,
predicate: (value: T) => boolean,
): Record<string, T> {
const result: Record<string, T> = {};
const entries = Object.entries(record);
for (const [key, value] of entries) {
if (predicate(value)) {
result[key] = value;
}
}
return result;
}