summaryrefslogtreecommitdiff
path: root/lib/internal/iterator.js
blob: 645dcbd9d344c17e2bd3e57aac7e69bb89ec21a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import isArrayLike from 'lodash/isArrayLike';
import getIterator from './getIterator';
import keys from 'lodash/keys';

export default function iterator(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 iterate = getIterator(coll);
    if (iterate) {
        return function next() {
            var item = iterate.next();
            if (item.done)
                return null;
            i++;
            return {value: item.value, key: i};
        };
    }

    var okeys = keys(coll);
    len = okeys.length;
    return function next() {
        i++;
        var key = okeys[i];
        return i < len ? {value: coll[key], key: key} : null;
    };
}