12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 'use strict';
-
- var hasSymbols = require('has-symbols')();
- var GetIntrinsic = require('../GetIntrinsic');
- var callBound = require('./callBound');
-
- var $iterator = GetIntrinsic('%Symbol.iterator%', true);
- var $arraySlice = callBound('Array.prototype.slice');
- var $arrayJoin = callBound('Array.prototype.join');
-
- module.exports = function getIteratorMethod(ES, iterable) {
- var usingIterator;
- if (hasSymbols) {
- usingIterator = ES.GetMethod(iterable, $iterator);
- } else if (ES.IsArray(iterable)) {
- usingIterator = function () {
- var i = -1;
- var arr = this; // eslint-disable-line no-invalid-this
- return {
- next: function () {
- i += 1;
- return {
- done: i >= arr.length,
- value: arr[i]
- };
- }
- };
- };
- } else if (ES.Type(iterable) === 'String') {
- usingIterator = function () {
- var i = 0;
- return {
- next: function () {
- var nextIndex = ES.AdvanceStringIndex(iterable, i, true);
- var value = $arrayJoin($arraySlice(iterable, i, nextIndex), '');
- i = nextIndex;
- return {
- done: nextIndex > iterable.length,
- value: value
- };
- }
- };
- };
- }
- return usingIterator;
- };
|