import { isArrayLike } from "../predicate/isArrayLike.mjs"; import { get } from "./get.mjs"; import { isString } from "../predicate/isString.mjs"; //#region src/compat/object/at.ts /** * Returns an array of values corresponding to `paths` of `object`. * * @template T - The type of the object. * @param {T} object - The object to iterate over. * @param {...(PropertyKey | PropertyKey[] | ArrayLike)} [paths] - The property paths to pick. * @returns {Array} - Returns the picked values. * * @example * ```js * const object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; * * at(object, ['a[0].b.c', 'a[1]']); * // => [3, 4] * ``` */ function at(object, ...paths) { if (paths.length === 0) return []; const allPaths = []; for (let i = 0; i < paths.length; i++) { const path = paths[i]; if (!isArrayLike(path) || isString(path)) { allPaths.push(path); continue; } for (let j = 0; j < path.length; j++) allPaths.push(path[j]); } const result = []; for (let i = 0; i < allPaths.length; i++) result.push(get(object, allPaths[i])); return result; } //#endregion export { at };