You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					50 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					50 lines
				
				1.7 KiB
			| 
											3 years ago
										 | var baseTimes = require('./_baseTimes'), | ||
|  |     isArguments = require('./isArguments'), | ||
|  |     isArray = require('./isArray'), | ||
|  |     isBuffer = require('./isBuffer'), | ||
|  |     isIndex = require('./_isIndex'), | ||
|  |     isTypedArray = require('./isTypedArray'); | ||
|  | 
 | ||
|  | /** Used for built-in method references. */ | ||
|  | var objectProto = Object.prototype; | ||
|  | 
 | ||
|  | /** Used to check objects for own properties. */ | ||
|  | var hasOwnProperty = objectProto.hasOwnProperty; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates an array of the enumerable property names of the array-like `value`. | ||
|  |  * | ||
|  |  * @private | ||
|  |  * @param {*} value The value to query. | ||
|  |  * @param {boolean} inherited Specify returning inherited property names. | ||
|  |  * @returns {Array} Returns the array of property names. | ||
|  |  */ | ||
|  | function arrayLikeKeys(value, inherited) { | ||
|  |   var isArr = isArray(value), | ||
|  |       isArg = !isArr && isArguments(value), | ||
|  |       isBuff = !isArr && !isArg && isBuffer(value), | ||
|  |       isType = !isArr && !isArg && !isBuff && isTypedArray(value), | ||
|  |       skipIndexes = isArr || isArg || isBuff || isType, | ||
|  |       result = skipIndexes ? baseTimes(value.length, String) : [], | ||
|  |       length = result.length; | ||
|  | 
 | ||
|  |   for (var key in value) { | ||
|  |     if ((inherited || hasOwnProperty.call(value, key)) && | ||
|  |         !(skipIndexes && ( | ||
|  |            // Safari 9 has enumerable `arguments.length` in strict mode.
 | ||
|  |            key == 'length' || | ||
|  |            // Node.js 0.10 has enumerable non-index properties on buffers.
 | ||
|  |            (isBuff && (key == 'offset' || key == 'parent')) || | ||
|  |            // PhantomJS 2 has enumerable non-index properties on typed arrays.
 | ||
|  |            (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || | ||
|  |            // Skip index properties.
 | ||
|  |            isIndex(key, length) | ||
|  |         ))) { | ||
|  |       result.push(key); | ||
|  |     } | ||
|  |   } | ||
|  |   return result; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = arrayLikeKeys; |