1 | 'use strict';
|
2 | var toIndexedObject = require('../internals/to-indexed-object');
|
3 | var addToUnscopables = require('../internals/add-to-unscopables');
|
4 | var Iterators = require('../internals/iterators');
|
5 | var InternalStateModule = require('../internals/internal-state');
|
6 | var defineIterator = require('../internals/define-iterator');
|
7 |
|
8 | var ARRAY_ITERATOR = 'Array Iterator';
|
9 | var setInternalState = InternalStateModule.set;
|
10 | var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 | module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
|
23 | setInternalState(this, {
|
24 | type: ARRAY_ITERATOR,
|
25 | target: toIndexedObject(iterated),
|
26 | index: 0,
|
27 | kind: kind
|
28 | });
|
29 |
|
30 |
|
31 | }, function () {
|
32 | var state = getInternalState(this);
|
33 | var target = state.target;
|
34 | var kind = state.kind;
|
35 | var index = state.index++;
|
36 | if (!target || index >= target.length) {
|
37 | state.target = undefined;
|
38 | return { value: undefined, done: true };
|
39 | }
|
40 | if (kind == 'keys') return { value: index, done: false };
|
41 | if (kind == 'values') return { value: target[index], done: false };
|
42 | return { value: [index, target[index]], done: false };
|
43 | }, 'values');
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | Iterators.Arguments = Iterators.Array;
|
49 |
|
50 |
|
51 | addToUnscopables('keys');
|
52 | addToUnscopables('values');
|
53 | addToUnscopables('entries');
|