foreach-extra
v0.0.2
Published
Common stuff we do with foreach loops
Downloads
36
Maintainers
Readme
Foreach-extra
A javascript extended iteration tool written in typescript:
- Recursion
- Delay
- Skip
- And more options to come soon
Because this tool use a callback to iterate, it can be used in a sync/async way.
const arr = ['pizza', 'pasta', 'salad']
foreachExtra(arr, (item, index, cb) => {
// Get next item after 1 second
setTimeout(() => {
// Call the callback to continue the iteration
cb()
}, 1000)
})
Installation
npm i foreach-extra
Node
const foreachExtra = require('foreach-extra')
import foreachExtra from 'foreach-extra'
Browser
<script src="node_modules/foreach-extra/dist/foreach-extra.min.js"></script>
Examples
Next examples will asume you have installed and imported foreach-extra.
foreachExtra(['pizza', 'pasta', 'salad'], (item, index, cb) => {
console.log(item, index)
// Get the next item
cb()
}, () => {
console.log('done!')
})
// pizza 0
// pasta 1
// salad 2
const obj = {
food1: 'pizza',
food2: 'pasta',
food3: 'salad'
}
foreachExtra(obj, (value, key, cb) => {
console.log(value, key)
// Get the next value
cb()
}, () => {
console.log('done!')
})
// pizza food1
// pasta food2
// salad food3
Options
- dalay: Time in ms to get the next item
- skip: Skip items between iterations
- recursive: Depth iteration
- skipRecursive: Skip items between recursive iterations
// Default options are
const options = {
delay: 0,
skip: 0,
recursive: false,
skipRecursive: 0
}
foreachExtra(['pizza', 'pasta', 'salad'], options, (item, index, cb) => {
console.log(item, index)
// Get the next item
cb()
}, () => {
console.log('done!')
})
// pizza 0
// pasta 1
// salad 2
Callback options
The callback function can receives the following options:
- break: Break the iteration
- next: Next item will be the next one (Default)
- prev: Next item will be the previous one
- first: Next item will be the first one
- repeat: Next item will be the same one
- last: Next item will be the last one
- data: Will return current array/object
foreachExtra(['pizza', 'pasta', 'salad'], (item, index, cb) => {
console.log(item, index)
// Break the iteration
cb('break')
}, () => {
console.log('done!')
})
// pizza 0
foreachExtra(['pizza', 'pasta', 'salad'], (item, index, cb) => {
console.log(item, index)
// Get the next and last item - salad
cb('last')
}, () => {
console.log('done!')
})
// pizza 0
// salad 1
foreachExtra(['pizza', 'pasta', 'salad'], (item, index, cb) => {
// console.log(item, index)
const data = cb('data')
console.log(data)
// Get the next item
cb()
}, () => {
console.log('done!')
})
// ['pizza', 'pasta', 'salad']
// ['pizza', 'pasta', 'salad']
// ['pizza', 'pasta', 'salad']
Advanced example
const options = {
skip: 1,
recursive: true,
skipRecursive: 2
}
const arr = [
'pizza',
'pasta',
'salad',
[
'nachos',
'tacos',
'fries',
'burger',
'fajitas'
],
'burrito',
'sandwich',
'chicken',
{
food1: 'chicken',
food2: 'pizza',
food3: 'salad',
food4: 'burrito',
food5: 'sandwich',
food6: ['steak', 'burger', 'hotdog', 'crepe'],
},
'cake',
'chips',
'soup',
'sushi',
'ramen',
'pancakes',
'waffles',
'steak',
'salmon'
]
foreachExtra(arr, options, (item, index, cb) => {
console.log(item, index)
// Get next item after 1 second
setTimeout(() => {
if (item === 'hotdog') {
// This will not work as expected because
// "hotdog" is the last item in the current array.
// We know that "crepe" is the last item but we set skipRecursive to 2
cb('last')
return
}
if (item === 'chips') {
// The last item in the current array is "salmon"
// but we set skip to 1 so we will get steak as the last item
cb('last')
return
}
cb()
}, 1000)
}, () => {
console.log('done!')
})
// pasta 1
// fries 2
// sandwich 5
// salad food3
// hotdog 2
// chips 9
// steak 15
For more examples take a look to the unit test
License
Copyright (c) 2021 Saenzo
MIT License