# es6-iterator

> Iterator abstraction based on ES6 specification

Latest version **2.0.3** (published 2017-10-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install es6-iterator
pnpm add es6-iterator
yarn add es6-iterator
bun add es6-iterator
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.3 |
| Published | 2017-10-17 |
| First published | 2013-10-12 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 19 |
| Author | Mariusz Nowak |
| Maintainers | medikoo |
| Keywords | iterator, array, list, set, map, generator |

## Links

- npm: https://www.npmjs.com/package/es6-iterator
- Repository: https://github.com/medikoo/es6-iterator
- Homepage: https://github.com/medikoo/es6-iterator#readme
- Issues: https://github.com/medikoo/es6-iterator/issues
- npm.io page: https://npm.io/package/es6-iterator

## Dependencies (3)

- [d](https://npm.io/package/d.md) 1
- [es5-ext](https://npm.io/package/es5-ext.md) ^0.10.35
- [es6-symbol](https://npm.io/package/es6-symbol.md) ^3.1.1

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 2.0.3 (latest) — 2017-10-17
- 2.0.2 — 2017-10-17
- 2.0.1 — 2017-03-15
- 2.0.0 — 2015-10-02
- 1.0.0 — 2015-06-23
- 0.1.3 — 2015-02-02
- 0.1.2 — 2014-11-19
- 0.1.1 — 2014-04-29
- 0.1.0 — 2014-04-29
- 0.0.0 — 2013-10-12

## README

# es6-iterator
## ECMAScript 6 Iterator interface

### Installation

	$ npm install es6-iterator
	
To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/)

## API

### Constructors

#### Iterator(list) _(es6-iterator)_

Abstract Iterator interface. Meant for extensions and not to be used on its own.

Accepts any _list_ object (technically object with numeric _length_ property).

_Mind it doesn't iterate strings properly, for that use dedicated [StringIterator](#string-iterator)_

```javascript
var Iterator = require('es6-iterator')
var iterator = new Iterator([1, 2, 3]);

iterator.next(); // { value: 1, done: false }
iterator.next(); // { value: 2, done: false }
iterator.next(); // { value: 3, done: false }
iterator.next(); // { value: undefined, done: true }
```


#### ArrayIterator(arrayLike[, kind]) _(es6-iterator/array)_

Dedicated for arrays and array-likes. Supports three iteration kinds:
* __value__ _(default)_ - Iterates values
* __key__ - Iterates indexes
* __key+value__ - Iterates keys and indexes, each iteration value is in _[key, value]_ form.


```javascript
var ArrayIterator = require('es6-iterator/array')
var iterator = new ArrayIterator([1, 2, 3], 'key+value');

iterator.next(); // { value: [0, 1], done: false }
iterator.next(); // { value: [1, 2], done: false }
iterator.next(); // { value: [2, 3], done: false }
iterator.next(); // { value: undefined, done: true }
```

May also be used for _arguments_ objects:

```javascript
(function () {
  var iterator = new ArrayIterator(arguments);

  iterator.next(); // { value: 1, done: false }
  iterator.next(); // { value: 2, done: false }
  iterator.next(); // { value: 3, done: false }
  iterator.next(); // { value: undefined, done: true }
}(1, 2, 3));
```

#### StringIterator(str) _(es6-iterator/string)_

Assures proper iteration over unicode symbols.  
See: http://mathiasbynens.be/notes/javascript-unicode

```javascript
var StringIterator = require('es6-iterator/string');
var iterator = new StringIterator('f🙈o🙉o🙊');

iterator.next(); // { value: 'f', done: false }
iterator.next(); // { value: '🙈', done: false }
iterator.next(); // { value: 'o', done: false }
iterator.next(); // { value: '🙉', done: false }
iterator.next(); // { value: 'o', done: false }
iterator.next(); // { value: '🙊', done: false }
iterator.next(); // { value: undefined, done: true }
```

### Function utilities

#### forOf(iterable, callback[, thisArg]) _(es6-iterator/for-of)_

Polyfill for ECMAScript 6 [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement.

```
var forOf = require('es6-iterator/for-of');
var result = [];

forOf('🙈🙉🙊', function (monkey) { result.push(monkey); });
console.log(result); // ['🙈', '🙉', '🙊'];
```

Optionally you can break iteration at any point:

```javascript
var result = [];

forOf([1,2,3,4]', function (val, doBreak) {
  result.push(monkey);
  if (val >= 3) doBreak();
});
console.log(result); // [1, 2, 3];
```

#### get(obj) _(es6-iterator/get)_

Return iterator for any iterable object.

```javascript
var getIterator = require('es6-iterator/get');
var iterator = get([1,2,3]);

iterator.next(); // { value: 1, done: false }
iterator.next(); // { value: 2, done: false }
iterator.next(); // { value: 3, done: false }
iterator.next(); // { value: undefined, done: true }
```

#### isIterable(obj) _(es6-iterator/is-iterable)_

Whether _obj_ is iterable

```javascript
var isIterable = require('es6-iterator/is-iterable');

isIterable(null); // false
isIterable(true); // false
isIterable('str'); // true
isIterable(['a', 'r', 'r']); // true
isIterable(new ArrayIterator([])); // true
```

#### validIterable(obj) _(es6-iterator/valid-iterable)_

If _obj_ is an iterable it is returned. Otherwise _TypeError_ is thrown.

### Method extensions

#### iterator.chain(iterator1[, …iteratorn]) _(es6-iterator/#/chain)_

Chain multiple iterators into one.

### Tests [![Build Status](https://travis-ci.org/medikoo/es6-iterator.png)](https://travis-ci.org/medikoo/es6-iterator)

	$ npm test

---
_Source: https://npm.io/package/es6-iterator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
