1234567891011121314151617181920212223242526272829303132333435363738 |
- 'use strict';
- var InternalStateModule = require('../internals/internal-state');
- var createIteratorConstructor = require('../internals/iterator-create-constructor');
- var createIterResultObject = require('../internals/create-iter-result-object');
- var hasOwn = require('../internals/has-own-property');
- var objectKeys = require('../internals/object-keys');
- var toObject = require('../internals/to-object');
- var OBJECT_ITERATOR = 'Object Iterator';
- var setInternalState = InternalStateModule.set;
- var getInternalState = InternalStateModule.getterFor(OBJECT_ITERATOR);
- module.exports = createIteratorConstructor(function ObjectIterator(source, mode) {
- var object = toObject(source);
- setInternalState(this, {
- type: OBJECT_ITERATOR,
- mode: mode,
- object: object,
- keys: objectKeys(object),
- index: 0
- });
- }, 'Object', function next() {
- var state = getInternalState(this);
- var keys = state.keys;
- while (true) {
- if (keys === null || state.index >= keys.length) {
- state.object = state.keys = null;
- return createIterResultObject(undefined, true);
- }
- var key = keys[state.index++];
- var object = state.object;
- if (!hasOwn(object, key)) continue;
- switch (state.mode) {
- case 'keys': return createIterResultObject(key, false);
- case 'values': return createIterResultObject(object[key], false);
- } /* entries */ return createIterResultObject([key, object[key]], false);
- }
- });
|