kld-array-iterators

A collection of classes used to iterate over arrays

kld-array-iterators

This module is a collection of classes used to iterate over arrays. Iterators include:

  • Array Iterator - a simple in-order walk of the provided args or array
  • Reverse Iterator - a reverse walk of the provided args or array
  • Random Iterator - a random walk of the provided args or array. All items are visited once and only once
  • Combination Iterator - a walk of all of the subsets of the provided args or array
  • Permutation Iterator - a walk of all permutations of the provided args or array
  • Sequence Iterator - walk the list of iterators in the provided args or array. Each iterator is visited in order and run to exhaustion
  • Group Iterator - iterator over a list of iterators, treating the entire group much like a counter. This is the cross-product of all iterators in the provided args or array

Installation

npm install kld-array-iterators

Examples

The following are some examples of each iterator in use. You can find the full source for these under the "examples" folder.

var Iterator = require('kld-array-iterators').ArrayIterator;

var iter = new Iterator(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

while (iter.hasNext()) {
    console.log(iter.next());
}

Output:

1
2
3
4
5
6
7
8
9
10
var Iterator = require('kld-array-iterators').ReverseIterator;

var iter = new Iterator(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

while (iter.hasNext()) {
    console.log(iter.next());
}

Output:

10
9
8
7
6
5
4
3
2
1
var Iterator = require('kld-array-iterators').RandomIterator;

var iter = new Iterator(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

while (iter.hasNext()) {
    console.log(iter.next());
}

Output:

10
6
7
5
3
8
1
9
2
4
var Iterator = require('kld-array-iterators').CombinationIterator;

var iter = new Iterator(1, 2, 3, 4);

while (iter.hasNext()) {
    console.log(iter.next());
}

Output:

[ 1 ]
[ 2 ]
[ 1, 2 ]
[ 3 ]
[ 1, 3 ]
[ 2, 3 ]
[ 1, 2, 3 ]
[ 4 ]
[ 1, 4 ]
[ 2, 4 ]
[ 1, 2, 4 ]
[ 3, 4 ]
[ 1, 3, 4 ]
[ 2, 3, 4 ]
[ 1, 2, 3, 4 ]
var Iterator = require('kld-array-iterators').PermutationIterator;

var iter = new Iterator(1, 2, 3, 4);

while (iter.hasNext()) {
    console.log(iter.next());
}

Output:

[ 1, 2, 3, 4 ]
[ 1, 2, 4, 3 ]
[ 1, 3, 2, 4 ]
[ 1, 4, 2, 3 ]
[ 1, 3, 4, 2 ]
[ 1, 4, 3, 2 ]
[ 2, 1, 3, 4 ]
[ 2, 1, 4, 3 ]
[ 3, 1, 2, 4 ]
[ 4, 1, 2, 3 ]
[ 3, 1, 4, 2 ]
[ 4, 1, 3, 2 ]
[ 2, 3, 1, 4 ]
[ 2, 4, 1, 3 ]
[ 3, 2, 1, 4 ]
[ 4, 2, 1, 3 ]
[ 3, 4, 1, 2 ]
[ 4, 3, 1, 2 ]
[ 2, 3, 4, 1 ]
[ 2, 4, 3, 1 ]
[ 3, 2, 4, 1 ]
[ 4, 2, 3, 1 ]
[ 3, 4, 2, 1 ]
[ 4, 3, 2, 1 ]
var ArrayIterator = require('kld-array-iterators').ArrayIterator,
    SequenceIterator = require('kld-array-iterators').SequenceIterator;

var iter = new SequenceIterator(
    new ArrayIterator(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
    new ArrayIterator('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')
);

while (iter.hasNext()) {
    console.log(iter.next());
}

Output:

1
2
3
4
5
6
7
8
9
10
a
b
c
d
e
f
g
h
i
var ArrayIterator = require('kld-array-iterators').ArrayIterator,
    CombinationIterator = require('kld-array-iterators').CombinationIterator,
    PermutationIterator = require('kld-array-iterators').PermutationIterator,
    RandomIterator = require('kld-array-iterators').RandomIterator,
    ReverseIterator = require('kld-array-iterators').ReverseIterator,
    GroupIterator = require('kld-array-iterators').GroupIterator,
    flatten = require('./flatten.js');

var iter = new GroupIterator(
    new ArrayIterator(1, 2),
    new CombinationIterator('a','b', 'c'),
    new PermutationIterator('X', 'Y','Z'),
    new RandomIterator(4, 5, 6),
    new ReverseIterator('d','e')
);
var count = 0;

while (iter.hasNext()) {
    var value = iter.next();
    var flattened = flatten(value).join("");
    count++;

    console.log("%d: %s", count, flattened);
}

Output:

1: 1aXYZ5e
2: 2aXYZ5e
3: 1bXYZ5e
4: 2bXYZ5e
5: 1abXYZ5e
6: 2abXYZ5e
7: 1cXYZ5e
8: 2cXYZ5e
9: 1acXYZ5e
...
495: 1abZYX4d
496: 2abZYX4d
497: 1cZYX4d
498: 2cZYX4d
499: 1acZYX4d
500: 2acZYX4d
501: 1bcZYX4d
502: 2bcZYX4d
503: 1abcZYX4d
504: 2abcZYX4d
var ArrayIterator = require('kld-array-iterators').ArrayIterator,
    GroupIterator = require('kld-array-iterators').GroupIterator,
    SequenceIterator = require('kld-array-iterators').SequenceIterator,
    flatten = require('./flatten');

var iter = new GroupIterator(
    new ArrayIterator('', '-', '+'),
    new ArrayIterator('1', '2'),
    new ArrayIterator('', '.0', '.1', '.02', '.003'),
    new SequenceIterator(
        new ArrayIterator(''),
        new GroupIterator(
            new ArrayIterator('e', 'E'),
            new ArrayIterator('', '-', '+'),
            new ArrayIterator('1', '2', '300')
        )
    )
);
var count = 0;

while (iter.hasNext()) {
    count++;

    var value = iter.next();
    var flattened = flatten(value).join('');

    console.log("%d: %s", count, flattened);
}

Output:

1: 1
2: -1
3: +1
4: 2
5: -2
6: +2
7: 1.0
8: -1.0
9: +1.0
...
561: +1.02E+300
562: 2.02E+300
563: -2.02E+300
564: +2.02E+300
565: 1.003E+300
566: -1.003E+300
567: +1.003E+300
568: 2.003E+300
569: -2.003E+300
570: +2.003E+300