foop
Version:
interfaces that describe their intentions.
41 lines (36 loc) • 3.52 kB
JavaScript
var toKey = require('../../cast/toKey')
var isNil = require('../../is/nullOrUndefined')
var isObj = require('../../is/obj')
// @TODO ~ also see reduceMap it has keyValReducer, can do `isPairs`
var defaultReduceArrayToObjIterator = function (reduced, next, index) {
if (isObj(next)) { Object.assign(reduced, next) }
else { reduced[toKey(index)] = next }
return reduced
}
/**
* @since 4.0.0
* @version 5.0.0 <- added index
*
* @param {Array} array array to reduce to object
* @param {Function} iterator function to call on reduced, with `next`
* @return {Object} reduced array
*
*
* @name reduceObj
* @alias reduceObject
* @alias toObj
*
* @see Chainable
*
* @TODO example
* @TODO @curried 2
*/
module.exports = function reduceArrayToObj(array, iterator) {
if (isNil(iterator)) { iterator = defaultReduceArrayToObjIterator }
var index = 0
return array.reduce(function(reduced, next) {
iterator(reduced, next, index)
return reduced
}, {})
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlQXJyYXlUb09iai5qcyIsInNvdXJjZXMiOlsicmVkdWNlQXJyYXlUb09iai5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB0b0tleSA9IHJlcXVpcmUoJy4uLy4uL2Nhc3QvdG9LZXknKVxuY29uc3QgaXNOaWwgPSByZXF1aXJlKCcuLi8uLi9pcy9udWxsT3JVbmRlZmluZWQnKVxuY29uc3QgaXNPYmogPSByZXF1aXJlKCcuLi8uLi9pcy9vYmonKVxuXG4vLyBAVE9ETyB+IGFsc28gc2VlIHJlZHVjZU1hcCBpdCBoYXMga2V5VmFsUmVkdWNlciwgY2FuIGRvIGBpc1BhaXJzYFxuY29uc3QgZGVmYXVsdFJlZHVjZUFycmF5VG9PYmpJdGVyYXRvciA9IChyZWR1Y2VkLCBuZXh0LCBpbmRleCkgPT4ge1xuICBpZiAoaXNPYmoobmV4dCkpIE9iamVjdC5hc3NpZ24ocmVkdWNlZCwgbmV4dClcbiAgZWxzZSByZWR1Y2VkW3RvS2V5KGluZGV4KV0gPSBuZXh0XG5cbiAgcmV0dXJuIHJlZHVjZWRcbn1cblxuLyoqXG4gKiBAc2luY2UgNC4wLjBcbiAqIEB2ZXJzaW9uIDUuMC4wIDwtIGFkZGVkIGluZGV4XG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgYXJyYXkgdG8gcmVkdWNlIHRvIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3IgZnVuY3Rpb24gdG8gY2FsbCBvbiByZWR1Y2VkLCB3aXRoIGBuZXh0YFxuICogQHJldHVybiB7T2JqZWN0fSByZWR1Y2VkIGFycmF5XG4gKlxuICpcbiAqIEBuYW1lIHJlZHVjZU9ialxuICogQGFsaWFzIHJlZHVjZU9iamVjdFxuICogQGFsaWFzIHRvT2JqXG4gKlxuICogQHNlZSBDaGFpbmFibGVcbiAqXG4gKiBAVE9ETyBleGFtcGxlXG4gKiBAVE9ETyBAY3VycmllZCAyXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVkdWNlQXJyYXlUb09iaihhcnJheSwgaXRlcmF0b3IpIHtcbiAgaWYgKGlzTmlsKGl0ZXJhdG9yKSkgaXRlcmF0b3IgPSBkZWZhdWx0UmVkdWNlQXJyYXlUb09iakl0ZXJhdG9yXG5cbiAgbGV0IGluZGV4ID0gMFxuICByZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKHJlZHVjZWQsIG5leHQpIHtcbiAgICBpdGVyYXRvcihyZWR1Y2VkLCBuZXh0LCBpbmRleClcbiAgICByZXR1cm4gcmVkdWNlZFxuICB9LCB7fSlcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0FBQ3pDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQztBQUNqREEsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDOzs7QUFHckNBLEdBQUssQ0FBQywrQkFBK0IsR0FBRyxTQUFBLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQUFBRztFQUNoRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFBO09BQ3hDLEVBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBQTs7RUFFakMsT0FBTyxPQUFPO0NBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JELE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO0VBQzFELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUEsUUFBUSxHQUFHLCtCQUErQixFQUFBOztFQUUvREMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDO0VBQ2IsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsT0FBTyxFQUFFLElBQUksRUFBRTtJQUMxQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7SUFDOUIsT0FBTyxPQUFPO0dBQ2YsRUFBRSxFQUFFLENBQUM7Q0FDUDsifQ==