[...].map()
that supports skip, limit, step and more
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';
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
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]
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]
*/
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
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
[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]
*/
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' ]
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]