foop
Version:
interfaces that describe their intentions.
59 lines (56 loc) • 5.71 kB
JavaScript
var LARGE_ARRAY_SIZE = require('../native/LARGE_ARRAY_SIZE')
var isNumberPrimitive = require('../is/numberPrimitive')
var isArray = require('../is/array')
var size = require('../util/size')
var from0 = require('../util/numberFromZero')
// const lengthMinusOne = require('../util/lengthMinusOne')
// const lengthFrom0 = require('../util/lengthFromZero')
// @TODO also ensure we coerce this number...?
// @NOTE calls from0 twice but inlined makes less diff than adding pointer
var arrFrom0 = function (x) { return new Array(from0(x) > LARGE_ARRAY_SIZE ? 0 : from0(x)); }
/**
* @desc make a new empty Array filled with a pre-allocated-length-from-zero
* @memberOf array
* @name preAllocate
* @since 5.0.0
* @func
*
* @param {Object|Array|number} x array or object to return an empty array.of.fill (pre-allocated)
* @return {Array} preallocated array full of undefined
*
* @TODO not sure about pre-allocating objects?
*
* {@link https://github.com/facebook/react/blob/8f4d30737def9fa3456149826414643b5cbbe4bf/docs/docs/optimizing-performance.md react-opt}
* {@link https://thewayofcode.wordpress.com/tag/array-pre-allocation/ the-way-of-code-array}
* {@link https://www.html5rocks.com/en/tutorials/speed/v8/#toc-topic-numbers html-5-rocks-v8}
* @see {@link html5-rocks-v8}
* @see {@link the-way-of-code-array}
* @see {@link react-opt}
* @see is/numberPrimitive
* @see is/array
* @see util/size
*
* @NOTE could be an `||` but it's annoying how it deopts sometimes (arr checks)
*
* @example
*
* preAllocate({eh: true})
* //=> {}
*
* preAllocate([1, 2, 10])
* //=> [undefined, undefined, undefined]
*
* preAllocate(2)
* //=> [undefined, undefined]
*
*/
module.exports = function preAllocate(x) {
// @TODO now that size is better, this can just be...
// return arrFrom0(size(x))
return isNumberPrimitive(x)
? arrFrom0(x)
: isArray(x)
? arrFrom0(x.length)
: arrFrom0(size(x))
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlQWxsb2NhdGUuanMiLCJzb3VyY2VzIjpbInByZUFsbG9jYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExBUkdFX0FSUkFZX1NJWkUgPSByZXF1aXJlKCcuLi9uYXRpdmUvTEFSR0VfQVJSQVlfU0laRScpXG5jb25zdCBpc051bWJlclByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2lzL251bWJlclByaW1pdGl2ZScpXG5jb25zdCBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaXMvYXJyYXknKVxuY29uc3Qgc2l6ZSA9IHJlcXVpcmUoJy4uL3V0aWwvc2l6ZScpXG5jb25zdCBmcm9tMCA9IHJlcXVpcmUoJy4uL3V0aWwvbnVtYmVyRnJvbVplcm8nKVxuLy8gY29uc3QgbGVuZ3RoTWludXNPbmUgPSByZXF1aXJlKCcuLi91dGlsL2xlbmd0aE1pbnVzT25lJylcbi8vIGNvbnN0IGxlbmd0aEZyb20wID0gcmVxdWlyZSgnLi4vdXRpbC9sZW5ndGhGcm9tWmVybycpXG5cbi8vIEBUT0RPIGFsc28gZW5zdXJlIHdlIGNvZXJjZSB0aGlzIG51bWJlci4uLj9cbi8vIEBOT1RFIGNhbGxzIGZyb20wIHR3aWNlIGJ1dCBpbmxpbmVkIG1ha2VzIGxlc3MgZGlmZiB0aGFuIGFkZGluZyBwb2ludGVyXG5jb25zdCBhcnJGcm9tMCA9IHggPT4gbmV3IEFycmF5KGZyb20wKHgpID4gTEFSR0VfQVJSQVlfU0laRSA/IDAgOiBmcm9tMCh4KSlcblxuLyoqXG4gKiBAZGVzYyBtYWtlIGEgbmV3IGVtcHR5IEFycmF5IGZpbGxlZCB3aXRoIGEgcHJlLWFsbG9jYXRlZC1sZW5ndGgtZnJvbS16ZXJvXG4gKiBAbWVtYmVyT2YgYXJyYXlcbiAqIEBuYW1lIHByZUFsbG9jYXRlXG4gKiBAc2luY2UgNS4wLjBcbiAqIEBmdW5jXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl8bnVtYmVyfSB4IGFycmF5IG9yIG9iamVjdCB0byByZXR1cm4gYW4gZW1wdHkgYXJyYXkub2YuZmlsbCAocHJlLWFsbG9jYXRlZClcbiAqIEByZXR1cm4ge0FycmF5fSBwcmVhbGxvY2F0ZWQgYXJyYXkgZnVsbCBvZiB1bmRlZmluZWRcbiAqXG4gKiBAVE9ETyBub3Qgc3VyZSBhYm91dCBwcmUtYWxsb2NhdGluZyBvYmplY3RzP1xuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi84ZjRkMzA3MzdkZWY5ZmEzNDU2MTQ5ODI2NDE0NjQzYjVjYmJlNGJmL2RvY3MvZG9jcy9vcHRpbWl6aW5nLXBlcmZvcm1hbmNlLm1kIHJlYWN0LW9wdH1cbiAqIHtAbGluayBodHRwczovL3RoZXdheW9mY29kZS53b3JkcHJlc3MuY29tL3RhZy9hcnJheS1wcmUtYWxsb2NhdGlvbi8gdGhlLXdheS1vZi1jb2RlLWFycmF5fVxuICoge0BsaW5rIGh0dHBzOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9zcGVlZC92OC8jdG9jLXRvcGljLW51bWJlcnMgaHRtbC01LXJvY2tzLXY4fVxuICogQHNlZSB7QGxpbmsgaHRtbDUtcm9ja3Mtdjh9XG4gKiBAc2VlIHtAbGluayB0aGUtd2F5LW9mLWNvZGUtYXJyYXl9XG4gKiBAc2VlIHtAbGluayByZWFjdC1vcHR9XG4gKiBAc2VlIGlzL251bWJlclByaW1pdGl2ZVxuICogQHNlZSBpcy9hcnJheVxuICogQHNlZSB1dGlsL3NpemVcbiAqXG4gKiBATk9URSBjb3VsZCBiZSBhbiBgfHxgIGJ1dCBpdCdzIGFubm95aW5nIGhvdyBpdCBkZW9wdHMgc29tZXRpbWVzIChhcnIgY2hlY2tzKVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgcHJlQWxsb2NhdGUoe2VoOiB0cnVlfSlcbiAqICAgIC8vPT4ge31cbiAqXG4gKiAgICBwcmVBbGxvY2F0ZShbMSwgMiwgMTBdKVxuICogICAgLy89PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqXG4gKiAgICBwcmVBbGxvY2F0ZSgyKVxuICogICAgLy89PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHByZUFsbG9jYXRlKHgpIHtcbiAgLy8gQFRPRE8gbm93IHRoYXQgc2l6ZSBpcyBiZXR0ZXIsIHRoaXMgY2FuIGp1c3QgYmUuLi5cbiAgLy8gcmV0dXJuIGFyckZyb20wKHNpemUoeCkpXG4gIHJldHVybiBpc051bWJlclByaW1pdGl2ZSh4KVxuICAgID8gYXJyRnJvbTAoeClcbiAgICA6IGlzQXJyYXkoeClcbiAgICAgID8gYXJyRnJvbTAoeC5sZW5ndGgpXG4gICAgICA6IGFyckZyb20wKHNpemUoeCkpXG59XG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDO0FBQzlEQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQzFEQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdENBLEdBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUM7Ozs7OztBQU0vQ0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFBLENBQUMsQ0FBQSxDQUFDLEFBQUcsU0FBQSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDM0UsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUU7OztFQUd2QyxPQUFPLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUN2QixRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ1gsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNSLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEI7In0=