keys-iterator
Version:
Returns an iterator of the keys/indexes of an Object, Map, Array, or Typed Array.
19 lines (16 loc) • 754 B
JavaScript
const count = require('map-iterable')((x, i) => i)
const emptyIterator = require('empty-iterator')
const is = require('is-instance-of')
const isIterator = require('is-iterator')
const isObject = require('is-object')
const propKeys = require('prop-keys')
const sbo = require('sbo')
const typedArrays = require('typed-arrays').names()
module.exports = sbo((c, {inObj, arrays = [], maps = [], reflectObj, sets = []} = {}) => {
if (isIterator(c) || is(c, ['Set', sets])) return count(c)
if (typeof c === 'string') return Array.from(c).keys()
if (is(c, ['Array', arrays, 'Map', maps, typedArrays])) return c.keys()[Symbol.iterator]()
if (isObject(c)) return propKeys(c, {enumOnly: !reflectObj, own: !inObj})
return emptyIterator()
})