iterator.js
1 'use strict'; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.default = createIterator; 7 8 var _isArrayLike = require('./isArrayLike'); 9 10 var _isArrayLike2 = _interopRequireDefault(_isArrayLike); 11 12 var _getIterator = require('./getIterator'); 13 14 var _getIterator2 = _interopRequireDefault(_getIterator); 15 16 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 17 18 function createArrayIterator(coll) { 19 var i = -1; 20 var len = coll.length; 21 return function next() { 22 return ++i < len ? { value: coll[i], key: i } : null; 23 }; 24 } 25 26 function createES2015Iterator(iterator) { 27 var i = -1; 28 return function next() { 29 var item = iterator.next(); 30 if (item.done) return null; 31 i++; 32 return { value: item.value, key: i }; 33 }; 34 } 35 36 function createObjectIterator(obj) { 37 var okeys = obj ? Object.keys(obj) : []; 38 var i = -1; 39 var len = okeys.length; 40 return function next() { 41 var key = okeys[++i]; 42 return i < len ? { value: obj[key], key } : null; 43 }; 44 } 45 46 function createIterator(coll) { 47 if ((0, _isArrayLike2.default)(coll)) { 48 return createArrayIterator(coll); 49 } 50 51 var iterator = (0, _getIterator2.default)(coll); 52 return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); 53 } 54 module.exports = exports['default'];