jashkenas / underscore

JavaScript's utility _ belt
https://underscorejs.org
MIT License
27.33k stars 5.53k forks source link

add _.oneArg (and maybe _.twoArgs and _.limitArgs) #2871

Open sktguha opened 4 years ago

sktguha commented 4 years ago

I suggest adding a new function called oneArg to underscore. It wraps a function and allows it to be called with one argument only and ignores rest of the arguments. Implementation: const oneArg = fn => arg => fn(arg);

usage: Before oneArg: ['34','11','19','199','201'].map(parseInt); // returns [34, NaN, 1, 1, 33]

After oneArg: const safeParseInt = oneArg(parseInt); ['34','11','19','199','201'].map(safeParseInt) // returns [34, 11, 19, 199, 201]

jgonggrijp commented 4 years ago

Thanks for the suggestion, @sktguha! It is an interesting idea. I'm cross-posting this to our companion project, Underscore-contrib, because I think it should be added there first before we consider making it part of the core library.

In the meanwhile, your particular use case can also be handled using _.partial:

import _, { partial } from 'underscore';

const safeParseInt = partial(parseInt, _, undefined);

You would be right to point out, though, that partial cannot handle variadic functions while oneArg can, so there is definitely an added value here.

sktguha commented 4 years ago

Thanks for the reply . Interestingly it is available as unary in lodash. https://bit.dev/lodash/lodash/unary