import { ArrBase } from '../typings/types'; type MapKey = string | number; type MapBy = K | K[] | ArrBase; interface ArrayToObject { (mapBy: MapBy | undefined | null, arr: ArrayLike): Record; (mapBy: MapBy | undefined | null): (arr: ArrayLike) => Record; } /** * Converts an array into an object. * * @param {Function|String|Array} mapBy The function invoked per element. * @param {Array} arr * @returns {Object} Returns the converted object. * * @comment * This function is initially forked from https://github.com/theZieger/arrayToObject * * @example * * // mapBy is a function * toObject(x => x.id, [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {1: {id: 1, name: 'foo'}, 2: {id: 2, name: 'bar'}} * toObject(x => x.id)([{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {1: {id: 1, name: 'foo'}, 2: {id: 2, name: 'bar'}} * * // mapBy is a string * toObject('id', [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {1: {id: 1, name: 'foo'}, 2: {id: 2, name: 'bar'}} * toObject('id')([{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {1: {id: 1, name: 'foo'}, 2: {id: 2, name: 'bar'}} * * // mapBy is an array * toObject(['id', 'name'], [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {'1_foo': {id: 1, name: 'foo'}, '2_bar': {id: 2, name: 'bar'}} * toObject(['id', 'name'])([{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {'1_foo': {id: 1, name: 'foo'}, '2_bar': {id: 2, name: 'bar'}} * * // mapBy is undefined, null, '', [], or any other value * toObject(null, [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {0: {id: 1, name: 'foo'}, 1: {id: 2, name: 'bar'}} * toObject(undefined, [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {0: {id: 1, name: 'foo'}, 1: {id: 2, name: 'bar'}} * toObject('', [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {0: {id: 1, name: 'foo'}, 1: {id: 2, name: 'bar'}} * toObject([], [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]); //=> {0: {id: 1, name: 'foo'}, 1: {id: 2, name: 'bar'}} */ export declare const toObject: ArrayToObject; export default toObject;