underscore icon indicating copy to clipboard operation
underscore copied to clipboard

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

Open sktguha opened this issue 5 years ago • 2 comments

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]

sktguha avatar Aug 07 '20 12:08 sktguha

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.

jgonggrijp avatar Aug 07 '20 20:08 jgonggrijp

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

sktguha avatar Aug 09 '20 10:08 sktguha