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
			| 
								 
											4 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;
							 |