# ctrl-it

> A control-flow iterator. This is a extra of each. You Can break or continue when in iterating.

Latest version **1.2.0** (published 2017-07-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install ctrl-it
pnpm add ctrl-it
yarn add ctrl-it
bun add ctrl-it
```

## 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 | 1.2.0 |
| Published | 2017-07-14 |
| First published | 2016-04-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | LnsooXD |
| Maintainers | lnsoo |
| Keywords | each, every, forEach, async/await, iterator, control, flow, ctrlflow, it |

## Links

- npm: https://www.npmjs.com/package/ctrl-it
- Repository: https://github.com/LnsooXD/ctrl-it
- Homepage: https://github.com/LnsooXD/ctrl-it#readme
- Issues: https://github.com/LnsooXD/ctrl-it/issues
- npm.io page: https://npm.io/package/ctrl-it

## Alternatives

- [async-exit-hook](https://npm.io/package/async-exit-hook.md) — 3.7M weekly downloads
- [evnty](https://npm.io/package/evnty.md) — 7.2K weekly downloads
- [eleventy-plugin-asciidoc](https://npm.io/package/eleventy-plugin-asciidoc.md) — 3.5K weekly downloads
- [@jswork/next-get2get](https://npm.io/package/@jswork/next-get2get.md) — 945 weekly downloads
- [@dashersw/axon](https://npm.io/package/@dashersw/axon.md) — 934 weekly downloads

## Recent versions

- 1.2.0 (latest) — 2017-07-14
- 1.1.0 — 2016-04-29
- 1.0.3 — 2016-04-28
- 1.0.2 — 2016-04-28
- 1.0.1 — 2016-04-27
- 1.0.0 — 2016-04-27

## README

![build-status](https://travis-ci.org/LnsooXD/ctrl-it.svg)
#ctrl-it
====
A control-flow iterator. This is a extra of each. You Can break or continue when in iterating.
 
##Installation

```shell
$ npm install ctrl-it
```

##Example

```js
var it = require('ctrl-it');

var obj = {
    a: 'A',
    b: 'B',
    c: 'C'
}

obj.__proto__ = {
    'd': 'D',
    'e': 'E'
};

// itrate all prop of obj and array:
// common one:

var result = '';
it.any(obj, function(k, v){
    result += k;
    result += v;
});
// beacuse it has  __proto__ so result is:
// result == aAbBcCdDeE''

// generator one is: 
var result = '';
yield it.some(obj, function *(k, v){
    result += k;
    result += v;
    // run some generator codes
});

// async/await one is:
var result = '';
await it.total(obj,  async (k, v) => {
    result += k;
    result += v;
    // run some async/await codes
});
// beacuse it has  __proto__ so result is:
// result == aAbBcCdDeE''

// flow control, you can 'break' by return true
// common one:
var arr = [1, 2, 3, 4, 5, 6];

var result = '';
var count = 0;
it.each(arr, function(i, v){
    result += v;
    count ++;
    if (count >= 3) {
        return true; // 'return true' makes this iterator break;
    }
});
// beacuse of 'return true' breaking the iterator, resule is '123'


// generator one:
var result = '';
var count = 0;
yield it.every(arr, function* (i, v){
     result += v;
     count ++;
     if (count >= 3) {
         return true; // 'return true' makes this iterator break;
     }
 });

 // async/await one:
var result = '';
var count = 0;
yield it.all(arr, async (i, v) => {
     result += v;
     count ++;
     if (count >= 3) {
         return true; // 'return true' makes this iterator break;
     }
 });
 // beacuse of 'return true' breaking the iterator, resule is '123
 
 // filter support
 // if 'filter' function not defined or return true, the 'iterator' function will receiver k, v pair.
 
 var obj = {
     a: 'A',
     b: 'B',
     c: 'C',
     e: 'E',
     f: 'F'
 }
 
 var result = '';
 it.each(obj, function iterator(k, v){
    result += k;
    result += v;
 }, function filter(k, v) {
    return 'k' === 'a' || 'k' === 'c'
 })
 
 // result === 'AC'
 
 var arr = [1,2,3,4,5,6,7]
 
 var result = '';
 yield it.every(arr, function* iterator(k, v) {
     result += k;
     result += v;
 }, function* filter(k, v) {
     return (v % 2) === 0;
});

// result === '123456'

// The filter all supported by it.any and it.some

```

##API

- it.any(obj, function it(key, value){...}) 

    >iterate all values of a object/array, even the hasOwnProperty function returns false
- it.some(obj, function* it(key, value){...})

    >the generator type function of it.any
- it.total(obj, async function it(key, value){...})

    >the async/await type function of it.any
- it.each(obj, function it(key, value){...})

    >just iterate the values of a object/array the hasOwnProperty function returns true 
- it.every(obj, function* it(key, value){...})

    >the generator type function of it.each
- it.all(obj, async function it(key, value){...})

    >the async/await  type function of it.each
- flow control

    >if the iterator-callback function return true, the iterator will be breaked.

##Authors

- [LnsooXD](https://github.com/LnsooXD)

## License

- [MIT](http://spdx.org/licenses/MIT)

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