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'];