Skip to content

Javascript

ZAKARIA ELALAOUI edited this page May 23, 2023 · 1 revision
Problem Solution
problem solution

The magic function called mapfun

mapfun

  • mapfun 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/index.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 is false
    • value : boolean flag indicating whether to apply the mapping function to the values of objects or not. The default value is true

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 with ArrayBuffer returns Array not ArrayBuffer .
  • BigInt and Number are not interchangeable, and you cannot directly perform arithmetic operations between them .

Alternatives

License

This projet is licensed under the terms of MIT License .