Package Exports
- advmap
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (advmap) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
advmap
[...].map()
that supports skip, limit, step and more
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]