00001 var baseTimes = require('./_baseTimes'),
00002 isArguments = require('./isArguments'),
00003 isArray = require('./isArray'),
00004 isBuffer = require('./isBuffer'),
00005 isIndex = require('./_isIndex'),
00006 isTypedArray = require('./isTypedArray');
00007
00009 var objectProto = Object.prototype;
00010
00012 var hasOwnProperty = objectProto.hasOwnProperty;
00013
00022 function arrayLikeKeys(value, inherited) {
00023 var isArr = isArray(value),
00024 isArg = !isArr && isArguments(value),
00025 isBuff = !isArr && !isArg && isBuffer(value),
00026 isType = !isArr && !isArg && !isBuff && isTypedArray(value),
00027 skipIndexes = isArr || isArg || isBuff || isType,
00028 result = skipIndexes ? baseTimes(value.length, String) : [],
00029 length = result.length;
00030
00031 for (var key in value) {
00032 if ((inherited || hasOwnProperty.call(value, key)) &&
00033 !(skipIndexes && (
00034
00035 key == 'length' ||
00036
00037 (isBuff && (key == 'offset' || key == 'parent')) ||
00038
00039 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
00040
00041 isIndex(key, length)
00042 ))) {
00043 result.push(key);
00044 }
00045 }
00046 return result;
00047 }
00048
00049 module.exports = arrayLikeKeys;