foop
Version:
interfaces that describe their intentions.
64 lines (60 loc) • 4.25 kB
JavaScript
var MAX_ARRAY_LENGTH = require('../native/MAX_ARRAY_LENGTH')
var toInteger = require('./toInteger')
/**
* Converts `value` to an integer suitable for use as the length of an
* array-like object.
*
* **Note:** This method is based on emca-toLength
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
*
* @since 5.0.0-beta.7
* @memberOf cast
*
* @param {*} value The value to convert.
* @return {number} Returns the converted integer.
*
* @fork 4.0.0
* @category Lang
*
* {@link http://ecma-international.org/ecma-262/7.0/#sec-tolength emca-tolength}
* {@link https://github.com/lodash/lodash/blob/master/toLength.js lodash-tolength}
* {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L159 underscore-tolength}
* @see {@link underscore-tolength}
* @see {@link lodash-tolength}
* @see {@link emca-tolength}
*
* @example
*
* toLength(3.2)
* // => 3
*
* toLength(Number.MIN_VALUE)
* // => 0
*
* toLength(Infinity)
* // => 4294967295
*
* toLength('3.2')
* // => 3
*
*/
function toLength(value) {
value = toInteger(value)
if (value < 0) {
return 0
}
// @TODO why nor return 0?
// @TODO if env perf > size?... still, this should
// `goto` the last else, easy math
// else if (value === 0) {
// return value
// }
else if (value > MAX_ARRAY_LENGTH) {
return MAX_ARRAY_LENGTH
}
else {
return value
}
}
module.exports = toLength
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9MZW5ndGguanMiLCJzb3VyY2VzIjpbInRvTGVuZ3RoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE1BWF9BUlJBWV9MRU5HVEggPSByZXF1aXJlKCcuLi9uYXRpdmUvTUFYX0FSUkFZX0xFTkdUSCcpXG5jb25zdCB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpXG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlIGxlbmd0aCBvZiBhblxuICogYXJyYXktbGlrZSBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIGVtY2EtdG9MZW5ndGhcbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHNpbmNlIDUuMC4wLWJldGEuN1xuICogQG1lbWJlck9mIGNhc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqXG4gKiBAZm9yayA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqXG4gKiB7QGxpbmsgaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGggZW1jYS10b2xlbmd0aH1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci90b0xlbmd0aC5qcyBsb2Rhc2gtdG9sZW5ndGh9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL2Jsb2IvbWFzdGVyL3VuZGVyc2NvcmUuanMjTDE1OSB1bmRlcnNjb3JlLXRvbGVuZ3RofVxuICogQHNlZSB7QGxpbmsgdW5kZXJzY29yZS10b2xlbmd0aH1cbiAqIEBzZWUge0BsaW5rIGxvZGFzaC10b2xlbmd0aH1cbiAqIEBzZWUge0BsaW5rIGVtY2EtdG9sZW5ndGh9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgdG9MZW5ndGgoMy4yKVxuICogICAgIC8vID0+IDNcbiAqXG4gKiAgICAgdG9MZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSlcbiAqICAgICAvLyA9PiAwXG4gKlxuICogICAgIHRvTGVuZ3RoKEluZmluaXR5KVxuICogICAgIC8vID0+IDQyOTQ5NjcyOTVcbiAqXG4gKiAgICAgdG9MZW5ndGgoJzMuMicpXG4gKiAgICAgLy8gPT4gM1xuICpcbiAqL1xuZnVuY3Rpb24gdG9MZW5ndGgodmFsdWUpIHtcbiAgdmFsdWUgPSB0b0ludGVnZXIodmFsdWUpXG5cbiAgaWYgKHZhbHVlIDwgMCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgLy8gQFRPRE8gd2h5IG5vciByZXR1cm4gMD9cbiAgLy8gQFRPRE8gaWYgZW52IHBlcmYgPiBzaXplPy4uLiBzdGlsbCwgdGhpcyBzaG91bGRcbiAgLy8gYGdvdG9gIHRoZSBsYXN0IGVsc2UsIGVhc3kgbWF0aFxuICAvLyBlbHNlIGlmICh2YWx1ZSA9PT0gMCkge1xuICAvLyAgIHJldHVybiB2YWx1ZVxuICAvLyB9XG4gIGVsc2UgaWYgKHZhbHVlID4gTUFYX0FSUkFZX0xFTkdUSCkge1xuICAgIHJldHVybiBNQVhfQVJSQVlfTEVOR1RIXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0xlbmd0aFxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztBQUM5REEsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0N4QyxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7RUFDdkIsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7O0VBRXhCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtJQUNiLE9BQU8sQ0FBQztHQUNUOzs7Ozs7O09BT0ksSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLEVBQUU7SUFDakMsT0FBTyxnQkFBZ0I7R0FDeEI7T0FDSTtJQUNILE9BQU8sS0FBSztHQUNiO0NBQ0Y7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFROyJ9