@monstermann/fn
Version:
A utility library for TypeScript.
61 lines (59 loc) • 1.18 kB
JavaScript
import { dfdlT } from "@monstermann/dfdl";
import { cloneMap } from "@monstermann/remmi";
//#region src/map/removeAll.ts
/**
* `removeAll(map, keys)`
*
* Removes all entries with the specified `keys` from `map`, returning a new map. This function supports iterables.
*
* ```ts
* removeAll(
* new Map([
* ["a", 1],
* ["b", 2],
* ["c", 3],
* ]),
* ["a", "c"],
* ); // Map(1) { "b" => 2 }
*
* removeAll(
* new Map([
* ["a", 1],
* ["b", 2],
* ["c", 3],
* ]),
* ["d", "e"],
* ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
* ```
*
* ```ts
* pipe(
* new Map([
* ["a", 1],
* ["b", 2],
* ["c", 3],
* ]),
* removeAll(["a", "c"]),
* ); // Map(1) { "b" => 2 }
*
* pipe(
* new Map([
* ["a", 1],
* ["b", 2],
* ["c", 3],
* ]),
* removeAll(["d", "e"]),
* ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
* ```
*/
const removeAll = dfdlT((target, keys) => {
let result;
for (const key of keys) {
if (!target.has(key)) continue;
result ??= cloneMap(target);
result.delete(key);
}
return result ?? target;
}, 2);
//#endregion
export { removeAll };