Skip to content

Commit

Permalink
feat(reverse): add reverse() method
Browse files Browse the repository at this point in the history
  • Loading branch information
blond committed Aug 13, 2016
1 parent 3aaf681 commit 711b7d2
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
3 changes: 1 addition & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ exports.isIterable = require('./lib/is-iterable');
exports.isIterator = require('./lib/is-iterator');
exports.series = require('./lib/series');
exports.evenly = require('./lib/evenly');

module.exports = exports;
exports.reverse = require('./lib/reverse');
67 changes: 67 additions & 0 deletions lib/reverse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
'use strict';

const assert = require('assert');

const createIterator = require('./create-iterator');
const done = require('./done');

/**
* Returns an reversed Iterator.
*
* **Important:** incompatible with infinite iterator.
* Don't use infinite iterator, otherwise reverse method will fall into endless loop loop.
*
* This is reminiscent of the reversing of an array.
*
* @example
* const reverse = require('ho-iter').reverse;
*
* const arr = [1, 2, 3, 4];
* const set = new Set([1, 2, 3, 4]);
*
* for (let i = arr.length - 1 ; i >= 0; i--) {
* console.log(arr[i]);
* }
*
* // ➜ 4 3 2 1
*
* for (let item of reverse(set)) {
* console.log(item);
* }
*
* // ➜ 4 3 2 1
*
* @param {Iterable} iterable iterable object to reversing.
* @returns {Iterator}
*/
function reverse(iterable) {
assert(
arguments.length < 2,
'The `resolve()` method not support more than one argument. Use `series() or `evenly()` to combine iterators.'
);

if (arguments.length === 0) {
return createIterator();
}

const iter = createIterator(iterable);
const arr = Array.from(iter);

let index = arr.length - 1;

return {
[Symbol.iterator]() { return this; },
next() {
if (index === -1) {
return done;
}

return {
value: arr[index--],
done: false
}
}
}
}

module.exports = reverse;

0 comments on commit 711b7d2

Please sign in to comment.