Giter Site home page Giter Site logo

advmap's Introduction

advmap

Build Status Coverage Status code style: prettier GitHub license

[...].map() that supports skip, limit, step and more

logo

Installation

As npm package

npm i -S advmap

Importing the module. It will automatically add a method to the array prototype.

require('advmap');
// or
import 'advmap';

Table of Contents

Configuration

Skip

skip controls how many items to skip before returning results

Example:

const array = [1, 2, 3, 4, 5].advmap(e => e, { skip: 2 });
console.log(array); // [3, 4, 5]

Limit

limit controls the maximum number of items returned

Example:

const array = [1, 2, 3, 4, 5].advmap(e => e, { limit: 2 });
console.log(array); // [1, 2]

it can be nicely combined with the skip property to create a pagination

const array = [1, 2, 3, 4, 5].advmap(e => e, { limit: 2, skip: 2 });
console.log(array); // [3, 4]

Step

controls the interval between two adjacent elements

const array = [1, 2, 3, 4, 5].advmap(e => e, { step: 2 });
console.log(array); // [1, 3, 5]

// if step is bigger than the array length it returns only the first element
const array = [1, 2, 3, 4, 5].advmap(e => e, { step: 10 });
console.log(array); // [1]

it also provides an additional index parameter that is the actual array index that is being mapped

[1, 2, 3, 4, 5].advmap((e, i, ii) => console.log(e, i, ii), { step: 2 });
/*
last parameter is where the item (e) is located in the array
[1, 0, 0]
[3, 1, 2]
[5, 2, 4]
*/
[1, 2, 3, 4, 5].advmap((e, i, ii) => console.log(e, i, ii), { step: 1 });
/*
If step is set to 1 (default) index parameters will be the same
[1, 0, 0]
[2, 1, 1]
[3, 2, 2]
[4, 3, 3]
[5, 4, 4]
*/

Previous params

adds a number of fixed parameters to the advmap method, before the current element

[1, 2, 3, 4, 5].advmap((p2, p1, e) => console.log(p2, p1, e), {
  previousParamsCount: 2,
});
/*
[undefined, undefined, 1]
[undefined, 1, 2]
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
*/

elements that are outsite of the array are undefined

Next params

adds a number of fixed parameters to the advmap method, after the current element

[1, 2, 3, 4, 5].advmap((e, p1, p2) => console.log(e, p1, p2), {
  nextParamsCount: 2,
});
/*
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, undefined]
[5, undefined, undefined]
*/

elements that are outsite of the array are undefined

Previous and next params combined

[1, 2, 3, 4, 5].advmap((p1, e, n2, n1) => console.log(p1, e, n2, n1), {
  previousParamsCount: 1,
  nextParamsCount: 2,
});
/*
[undefined, 1, 2, 3]
[1, 2, 3, 4]
[2, 3, 4, 5]
[3, 4, 5, undefined]
[4, 5, undefined, undefined]
*/

Filtering

advmap provides an additional parameter that can be used to check if the current element, index etc.. respects a particular condition

[1, 2, 3, 4, 5].advmap(e => e > 2 && e < 4, e => e + ' apples');
// [ '3 apples' ]

it also has all the arguments that the main map function has

[0, 2, 3, 1, 5].advmap(
  (p1, e, n1) => p1 > e && e < n1,
  (p1, e) => e + ' is between two bigger numbers',
  {
    previousParamsCount: 1,
    nextParamsCount: 1,
  }
);
// [ '1 is between two bigger numbers' ]

Examples

Simple usage like the native [].map function

const array = [1, 2, 3, 4].advmap(e => e + 1);
console.log(array); // [2,3,4,5]

Generate the next number in a fibonacci sequence

let array = [1, 1];
const nextNumber = () =>
  array.advmap((p1, e, n1) => (p1 ? p1 + e : n1), {
    previousParamsCount: 1,
    nextParamsCount: 1,
  });
array = nextNumber(); // [1, 2]
array = nextNumber(); // [2, 3]
array = nextNumber(); // [3, 5]
array = nextNumber(); // [5, 8]
array = nextNumber(); // [8, 13]

Find this module useful ? Give it a โญ !


License

MIT

advmap's People

Contributors

alexcambose avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.