New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

foreach-extra

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

foreach-extra

Common stuff we do with foreach loops

latest
Source
npmnpm
Version
0.0.2
Version published
Weekly downloads
70
-35.19%
Maintainers
1
Weekly downloads
 
Created
Source

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

Keywords

for

FAQs

Package last updated on 03 Nov 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts