Array.prototype.mapOn method

Peter Jaszkowiak p.jaszkow at gmail.com
Fri Oct 27 15:17:02 UTC 2017


Actually flatMap isn't even needed. My question is, why use this over a
normal map with a conditional? It doesn't seem to really save any space.

Is there any prior art? Do a lot of people use this kind of thing in ramda,
lodash, etc?

On Oct 27, 2017 09:11, "Ahmad Bamieh" <ahmadbamieh at gmail.com> wrote:

Can you elaborate?

`mapOn` will apply the map only if the item passes the condition, `flatMap`
has a different use case.

I'm referring to this flatMap implementation:  https://gist.github.com/
samgiles/762ee337dff48623e729

Cheers!
Ahmad Bamieh,

On Fri, Oct 27, 2017 at 6:02 PM, Peter Jaszkowiak <p.jaszkow at gmail.com>
wrote:

> I think flatMap fills this use case pretty well.
>
> On Oct 27, 2017 08:56, "Ahmad Bamieh" <ahmadbamieh at gmail.com> wrote:
>
>> 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,
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20171027/842fc3a0/attachment-0001.html>


More information about the es-discuss mailing list