1
0
mirror of https://github.com/dzeiocom/libs.git synced 2025-04-23 03:12:12 +00:00

feat(object-util): Add two functions objectFilter & objectPick

Signed-off-by: Avior <git@avior.me>
This commit is contained in:
Florian Bouillon 2025-03-31 15:09:07 +02:00
parent 91a6409e90
commit 24d598f415
Signed by: Florian Bouillon
GPG Key ID: 7676FF78F3BC40EC

View File

@ -385,6 +385,39 @@ export function objectGet<T = any>(obj: any, path: Array<string | number | symbo
throw new Error(`it should never get there ! (${JSON.stringify(obj)}, ${path}, ${JSON.stringify(pointer)})`) throw new Error(`it should never get there ! (${JSON.stringify(obj)}, ${path}, ${JSON.stringify(pointer)})`)
} }
/**
* Only return the specified keys from the object
*
* @param obj the object to pick from
* @param keys the keys to keep
* @returns a new copy of `obj` with only `keys` in it
*/
function objectPick<V, K extends string | number | symbol>(obj: Record<K, V>, ...keys: Array<K>): Pick<Record<K, V>, K> {
mustBeObject(obj)
return objectFilter(obj, (_, k) => keys.includes(k)) as Pick<Record<K, V>, K>
}
/**
* filter elements from the object and return a new copy
*
* @param obj the object to filter
* @param fn the function to pass it through
* @returns the filtered object
*/
function objectFilter<V, K extends string | number | symbol>(obj: Record<K, V>, fn: (v: V, k: K, idx: number) => boolean): Partial<Record<K, V>> {
mustBeObject(obj)
const clone: Partial<Record<K, V>> = {}
objectLoop(obj, (v, k, idx) => {
const res = fn(v, k, idx)
if (res) {
clone[k] = v
}
})
return clone
}
/** /**
* return if an item is an object * return if an item is an object
* *
@ -414,12 +447,14 @@ export default {
objectClean, objectClean,
objectClone, objectClone,
objectEqual, objectEqual,
objectFilter,
objectFind, objectFind,
objectGet, objectGet,
objectKeys, objectKeys,
objectLoop, objectLoop,
objectMap, objectMap,
objectOmit, objectOmit,
objectPick,
objectRemap, objectRemap,
objectSet, objectSet,
objectSize, objectSize,