Permalink
Cannot retrieve contributors at this time
65 lines (62 sloc)
2.23 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/lodash/transform.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var arrayEach = require('./_arrayEach'), | |
baseCreate = require('./_baseCreate'), | |
baseForOwn = require('./_baseForOwn'), | |
baseIteratee = require('./_baseIteratee'), | |
getPrototype = require('./_getPrototype'), | |
isArray = require('./isArray'), | |
isBuffer = require('./isBuffer'), | |
isFunction = require('./isFunction'), | |
isObject = require('./isObject'), | |
isTypedArray = require('./isTypedArray'); | |
/** | |
* An alternative to `_.reduce`; this method transforms `object` to a new | |
* `accumulator` object which is the result of running each of its own | |
* enumerable string keyed properties thru `iteratee`, with each invocation | |
* potentially mutating the `accumulator` object. If `accumulator` is not | |
* provided, a new object with the same `[[Prototype]]` will be used. The | |
* iteratee is invoked with four arguments: (accumulator, value, key, object). | |
* Iteratee functions may exit iteration early by explicitly returning `false`. | |
* | |
* @static | |
* @memberOf _ | |
* @since 1.3.0 | |
* @category Object | |
* @param {Object} object The object to iterate over. | |
* @param {Function} [iteratee=_.identity] The function invoked per iteration. | |
* @param {*} [accumulator] The custom accumulator value. | |
* @returns {*} Returns the accumulated value. | |
* @example | |
* | |
* _.transform([2, 3, 4], function(result, n) { | |
* result.push(n *= n); | |
* return n % 2 == 0; | |
* }, []); | |
* // => [4, 9] | |
* | |
* _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { | |
* (result[value] || (result[value] = [])).push(key); | |
* }, {}); | |
* // => { '1': ['a', 'c'], '2': ['b'] } | |
*/ | |
function transform(object, iteratee, accumulator) { | |
var isArr = isArray(object), | |
isArrLike = isArr || isBuffer(object) || isTypedArray(object); | |
iteratee = baseIteratee(iteratee, 4); | |
if (accumulator == null) { | |
var Ctor = object && object.constructor; | |
if (isArrLike) { | |
accumulator = isArr ? new Ctor : []; | |
} | |
else if (isObject(object)) { | |
accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; | |
} | |
else { | |
accumulator = {}; | |
} | |
} | |
(isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { | |
return iteratee(accumulator, value, index, object); | |
}); | |
return accumulator; | |
} | |
module.exports = transform; |