mapfun v0.9.20
π Javascript provides a built-in Math module with various functions.
β οΈHowever, there is room for improvement in terms of efficiency. For instance, the Math.sqrt(x) function can calculate the square root of a number x, but it has limitations such as the inability to accept multiple parameters and the inability to map the function to different data types like Arrays and Objects.
π‘ In zikojs, I have addressed these limitations, providing a more versatile and efficient solution using the mapfun
utility which is a function that applies a mapping function to an infinite number of input elements, with options to skip certain elements and selectively apply the mapping to keys and/or values of objects.
π‘ The mapfun
function has been developed in JavaScript and Python, offering the same functionality in different programming languages.
Install
npm install mapfun
Import
common js :
const {mapfun} = require("mapfun");
es module
import {mapfun} from "mapfun"
unpkg
<script src="https://unpkg.com/mapfun@latest/dist/mapfun.js"></script>
Syntax
mapfun(fun,{skip,key,value},...X)
Arguments
fun
: The mapping function that will be applied to each element in the input elements....X
:The elements to be mapped .{ skip , key , value }
: Object with three optional properties :skip
: specifies the elements to skip during the mapping process.key
: boolean flag indicating whether to apply the mapping function to the keys of objects or not. The default value isfalse
value
: boolean flag indicating whether to apply the mapping function to the values of objects or not. The default value istrue
Examples
console.log(
mapfun(n => n + 2,{}, 1,"a", [1, 2, 3], true, {
a: 2,
b: 3,
c: { d: 3, e: [1, 3, 4] },
})
);
/* Expected log
[
3,
"a2",
[3, 4, 5],
3,
{
a: 4,
b: 5,
c: {
d: 5,
e: [3, 5, 6],
},
},
];
*/
const PI=Math.PI
const sin=(...args)=>mapfun(Math.sin,{},...args)
console.log(sin(0,PI/4,[0,PI/6,PI/4,{x:PI/8,y:PI/12}]))
/* Expected log
[
0,
0.7071067811865475,
[
0,
0.49999999999999994,
0.7071067811865475,
{
x: 0.3826834323650898,
y: 0.25881904510252074,
},
],
];
*/
Advanced Examples
const A=new Map([["a",1],["b",2]]);
// Map { 'a' => 1, 'b' => 2 }
console.log(mapfun(n=>n+1,{},A));
/* Expected log
Map { 'a' => 2, 'b' => 3 }
*/
console.log(mapfun(n=>n+1,{key:true},A));
/* Expected log
Map { 'a1' => 2, 'b1' => 3 }
*/
console.log(mapfun(n=>n+1,{value:false},A));
/* Expected log
Map { 'a' => 1, 'b' => 2 }
*/
console.log(mapfun(n=>n+1,{key:true,value:false},A));
/* Expected log
Map { 'a1' => 1, 'b1' => 2 }
*/
const pow=(...x)=>{
n=x.pop();
return mapfun(a=>Math.pow(a,n),{},...x)
}
console.log(pow(1,2,{y:2},3))
Supported datatypes
Datatype | Support |
---|---|
Number | β |
String | β |
Boolean | β |
Null | β |
NaN | β |
Undefined | β |
BigInt | β |
Array | β |
Object | β |
Map | β |
WeakMap | β |
Set | β |
WeakSet | β |
ArrayBuffer | β |
Symbol | β |
β οΈ
mapfun
withArrayBuffer
returnsArray
notArrayBuffer
.- BigInt and Number are not interchangeable, and you cannot directly perform arithmetic operations between them .
Alternatives
Python
License
This projet is licensed under the terms of MIT License .