foop
Version:
interfaces that describe their intentions.
62 lines (58 loc) • 5.56 kB
JavaScript
var MAX_SAFE_INTEGER = require('../native/MAX_SAFE_INTEGER')
var isSymbol = require('./symbol')
var isNil = require('./nullOrUndefined')
var isNumberPrimitive = require('./numberPrimitive')
var isUnsignedInteger = require('./unsignedInteger')
var hasDecimals = require('./hasDecimals')
/**
* @name isValidIndex
* @desc Checks if `value` is a valid array-like index.
* @since 5.0.0-beta.6
* @memberOf is
*
* @param {*} x The value to check.
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
* @return {boolean} Returns `true` if `value` is a valid index, else `false`.
*
* {@link https://github.com/lodash/lodash/blob/master/.internal/isIndex.js lodash-is-valid-index}
* @see {@link lodash-is-valid-index}
* @see is/hasDecimals
* @see native/MAX_SAFE_INTEGER
*
* @example
*
* isValidIndex(0) //=> true
* isValidIndex(100) //=> true
* isValidIndex('100') //=> true
*
* isValidIndex('100.1') //=> false
*
*/
module.exports = function isValidIndex(x, length) {
length = isNil(length) ? MAX_SAFE_INTEGER : length
// !! so 0 would be false
// but this is a silly check
// because if it is 0, that does not matter until isUnsignedInteger check
// and in that case we already check > -1 anyway
//
// eslint-disable-next-line
// if (!!length) {
// return false
// }
if (isNumberPrimitive(x)) {
return true
}
// above 0, has no decimals, is less than length
else if (!isSymbol(x) && isUnsignedInteger(x)) {
return x > -1 && !hasDecimals(x) && x < length && length >= 0
}
else {
return false
}
// @NOTE was some other libs version, hard to read
// return !!length &&
// (type == 'number' ||
// (type != 'symbol' && reIsUint.test(value))) &&
// (value > -1 && value % 1 == 0 && value < length)
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRJbmRleC5qcyIsInNvdXJjZXMiOlsidmFsaWRJbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gcmVxdWlyZSgnLi4vbmF0aXZlL01BWF9TQUZFX0lOVEVHRVInKVxuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCcuL3N5bWJvbCcpXG5jb25zdCBpc05pbCA9IHJlcXVpcmUoJy4vbnVsbE9yVW5kZWZpbmVkJylcbmNvbnN0IGlzTnVtYmVyUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9udW1iZXJQcmltaXRpdmUnKVxuY29uc3QgaXNVbnNpZ25lZEludGVnZXIgPSByZXF1aXJlKCcuL3Vuc2lnbmVkSW50ZWdlcicpXG5jb25zdCBoYXNEZWNpbWFscyA9IHJlcXVpcmUoJy4vaGFzRGVjaW1hbHMnKVxuXG4vKipcbiAqIEBuYW1lIGlzVmFsaWRJbmRleFxuICogQGRlc2MgQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICogQG1lbWJlck9mIGlzXG4gKlxuICogQHBhcmFtIHsqfSB4IFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvaXNJbmRleC5qcyBsb2Rhc2gtaXMtdmFsaWQtaW5kZXh9XG4gKiBAc2VlIHtAbGluayBsb2Rhc2gtaXMtdmFsaWQtaW5kZXh9XG4gKiBAc2VlIGlzL2hhc0RlY2ltYWxzXG4gKiBAc2VlIG5hdGl2ZS9NQVhfU0FGRV9JTlRFR0VSXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBpc1ZhbGlkSW5kZXgoMCkgICAgICAgLy89PiB0cnVlXG4gKiAgICBpc1ZhbGlkSW5kZXgoMTAwKSAgICAgLy89PiB0cnVlXG4gKiAgICBpc1ZhbGlkSW5kZXgoJzEwMCcpICAgLy89PiB0cnVlXG4gKlxuICogICAgaXNWYWxpZEluZGV4KCcxMDAuMScpIC8vPT4gZmFsc2VcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNWYWxpZEluZGV4KHgsIGxlbmd0aCkge1xuICBsZW5ndGggPSBpc05pbChsZW5ndGgpID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aFxuXG4gIC8vICEhIHNvIDAgd291bGQgYmUgZmFsc2VcbiAgLy8gYnV0IHRoaXMgaXMgYSBzaWxseSBjaGVja1xuICAvLyBiZWNhdXNlIGlmIGl0IGlzIDAsIHRoYXQgZG9lcyBub3QgbWF0dGVyIHVudGlsIGlzVW5zaWduZWRJbnRlZ2VyIGNoZWNrXG4gIC8vIGFuZCBpbiB0aGF0IGNhc2Ugd2UgYWxyZWFkeSBjaGVjayA+IC0xIGFueXdheVxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgLy8gaWYgKCEhbGVuZ3RoKSB7XG4gIC8vICAgcmV0dXJuIGZhbHNlXG4gIC8vIH1cbiAgaWYgKGlzTnVtYmVyUHJpbWl0aXZlKHgpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBhYm92ZSAwLCBoYXMgbm8gZGVjaW1hbHMsIGlzIGxlc3MgdGhhbiBsZW5ndGhcbiAgZWxzZSBpZiAoIWlzU3ltYm9sKHgpICYmIGlzVW5zaWduZWRJbnRlZ2VyKHgpKSB7XG4gICAgcmV0dXJuIHggPiAtMSAmJiAhaGFzRGVjaW1hbHMoeCkgJiYgeCA8IGxlbmd0aCAmJiBsZW5ndGggPj0gMFxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gQE5PVEUgd2FzIHNvbWUgb3RoZXIgbGlicyB2ZXJzaW9uLCBoYXJkIHRvIHJlYWRcbiAgLy8gcmV0dXJuICEhbGVuZ3RoICYmXG4gIC8vICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgLy8gICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgLy8gICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpXG59XG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDO0FBQzlEQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDcENBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0FBQzFDQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0FBQ3REQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0FBQ3REQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEI1QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7RUFDaEQsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxNQUFNOzs7Ozs7Ozs7OztFQVdsRCxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3hCLE9BQU8sSUFBSTtHQUNaOztPQUVJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxNQUFNLElBQUksQ0FBQztHQUM5RDtPQUNJO0lBQ0gsT0FBTyxLQUFLO0dBQ2I7Ozs7Ozs7Q0FPRjsifQ==