UNPKG

object-loops

Version:

Functional methods like forEach, map, filter, and other Array methods for Objects in javascript

30 lines (26 loc) 808 B
/** * @module object-loops/inverse */ var isInteger = require('101/is-integer') var reduce = require('./reduce') /** * Creates a new object with keys and values flipped. * @function module:object-loops/inverse * @param {object} [obj] - object to inverse keys and values, not accepted if being used directly on Object.prototype * @returns {object} newly created object with inversed values */ module.exports = inverse function inverse (obj) { if (Array.isArray(obj)) { var valsAreInts = obj.every(isInteger) return obj.reduce(flip, valsAreInts ? [] : {}) } if (typeof obj !== 'object' && typeof obj !== 'function') { throw new TypeError(obj + ' must be an object') } return reduce(obj, flip, {}) } function flip (inversed, val, key) { inversed[val] = key return inversed }