/* * Copyright (C) 2022 StApps * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ /** * Pick a set of properties from an object */ export function pick(object: T, keys: U[]): Pick { return keys.reduce((accumulator, key) => { if (object.hasOwnProperty(key)) { accumulator[key] = object[key]; } return accumulator; }, {} as Pick); } /** * Pick a set of properties from an object using a predicate function */ export function pickBy( object: T, predicate: (value: T[U], key: U) => boolean, ): Pick { return (Object.keys(object) as U[]).reduce((accumulator, key) => { if (predicate(object[key], key)) { accumulator[key] = object[key]; } return accumulator; }, {} as Pick); }