conductor
Version:
A modern & functional JavaScript utility library
44 lines (29 loc) • 1.36 kB
Markdown
---
description: Execute a function for each item in a collection
---
# forEach
```erlang
forEach :: (Function callback, Collection collection) => undefined | Promise<undefined>
```
## description
Iterates over a collection and calls the provided callback function for each item in the collection. The callback function should have the following signature:
`(Any value, Any key, Collection collection) => Any`
where:
* **value** is the current item's value
* **key** is the item's key or index \(depending on if the collection is an `Array`, a `Set`, an `Object`, or a `Map`\).
* **collection** is the collection being iterated on.
{% hint style="info" %}
If the collection is a `Set`, the **value** and the **key** will be equal.
{% endhint %}
If the callback function is _asynchronous_, `forEach` will return a `Promise` which will be resolved when all the promises generated by calling the callback function with each item in the collection are resolved. You could say that `forEach` is roughly equivalent `map`, except it returns `undefined` in the end \(ie `forEach( asyncFn, collection)` ~ `Promise.all(collection.map(asyncFn)).then(() => undefined)`\).
## examples
### basic example
```javascript
import { forEach } from 'conductor'
const numbers = [3, 1, 4]
const log = x => console.log(x)
forEach(numbers, log)
// 3
// 1
// 4
```