diff options
author | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-07-21 11:49:27 -0400 |
---|---|---|
committer | Graeme Yeates <yeatesgraeme@gmail.com> | 2016-07-21 11:49:27 -0400 |
commit | 422026db5d3dffafe9e7c5ca3289e3c9718eaf76 (patch) | |
tree | 4b2f40d83d9314413934ffdab13eaba9da546677 | |
parent | 72a781044621e9b9ff036de7ad207f1f0ff24cee (diff) | |
download | async-422026db5d3dffafe9e7c5ca3289e3c9718eaf76.tar.gz |
Make iterator more prone to JIT optimizationsiterator-jit
-rw-r--r-- | lib/internal/iterator.js | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/lib/internal/iterator.js b/lib/internal/iterator.js index 645dcbd..15c6fdd 100644 --- a/lib/internal/iterator.js +++ b/lib/internal/iterator.js @@ -2,33 +2,40 @@ import isArrayLike from 'lodash/isArrayLike'; import getIterator from './getIterator'; import keys from 'lodash/keys'; -export default function iterator(coll) { +function createArrayIterator(coll) { var i = -1; - var len; - if (isArrayLike(coll)) { - len = coll.length; - return function next() { - i++; - return i < len ? {value: coll[i], key: i} : null; - }; + var len = coll.length; + return function next() { + return ++i < len ? {value: coll[i], key: i} : null; } +} - var iterate = getIterator(coll); - if (iterate) { - return function next() { - var item = iterate.next(); - if (item.done) - return null; - i++; - return {value: item.value, key: i}; - }; +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) + return null; + i++; + return {value: item.value, key: i}; } +} - var okeys = keys(coll); - len = okeys.length; +function createObjectIterator(obj) { + var okeys = keys(obj); + var i = -1; + var len = okeys.length; return function next() { - i++; - var key = okeys[i]; - return i < len ? {value: coll[key], key: key} : null; + var key = okeys[++i]; + return i < len ? {value: obj[key], key: key} : null; }; } + +export default function iterator(coll) { + if (isArrayLike(coll)) { + return createArrayIterator(coll); + } + + var iterator = getIterator(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} |