Array.prototype.mapOn method

Ahmad Bamieh ahmadbamieh at gmail.com
Fri Oct 27 14:55:36 UTC 2017


Hello,

This method maps over an array of items that meet a certain condition,
otherwise just pass the item as is. It is a nice feature to have along with
map, filter, and other functional methods on the array prototype.
*Description*
Map over an array of items:
- If the item meets the condition, apply the callback
- If the item does not meet the condition return the item without any
transformation.
*Example*
```
const exampleArray = [1, 2, 9, "C", "B", "C"];
exampleArray.mapOn(Math.sqrt, Number.isInteger); // [1, 1.414, 3, "A", "B",
"C"];
```
*Parameters*
*- callback*
  Function that produces an element of the new Array, taking three
arguments:
*     - currentValue*
       The current element being processed in the array.
*     - index*
       The index of the current element being processed in the array.
*     - array*
       The array map was called upon.
*- condition*
  Function perdicate, if returned value is truthy, the callback is applied,
taking three arguments:
*     - currentValue*
       The current element being processed in the array.
*     - index*
       The index of the current element being processed in the array.
*     - array*
       The array map was called upon.
*- thisArg*
  Optional. Value to use as this when executing callback.

*Return value*
A new array with each element being the result of the callback function if
it meets the condition, otherwise the same item is returned.

*Code / Polyfill *
Array.prototype.mapOn = function(callback, condition, thisArg=this) {
return this.map((currentValue, index, array) => {
if(condition(currentValue, index, array)) {
return callback.call(thisArg, currentValue, index, array)
}
return currentValue
})
}


*Link to Gist*

https://gist.github.com/Bamieh/9fccbf4bc394d0da2fd0c8bb5d314476

Cheers!
Ahmad Bamieh,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20171027/16242784/attachment-0001.html>


More information about the es-discuss mailing list