Can't do push in forEach
Jordan Harband
ljharb at gmail.com
Thu May 14 19:07:07 UTC 2015
`arr.push` is `Array.prototype.push`. If you want it bound to `arr`, you'd
need to use `.bind` or actually call it with `arr.push()`. `arr.push.only`
would lose the context of the "arr", so that's not an option for your use
case as described.
Arrow functions (with Array#map perhaps?) are your best bet here.
On Thu, May 14, 2015 at 11:50 AM, Andrea Giammarchi <
andrea.giammarchi at gmail.com> wrote:
> > So this style I favorite since I want to avoid creating another
> function:
>
> this is like believing that `fn.bind()` won't create a different
> object/function ... right?
>
> Or you want to lock that function to receive one forever until you unlock
> it? That's the only way you could mutate the function behavior without
> creating a new object/function like bind would do.
>
> And since bind is at least 3X slower than fat arrow, why would you do that?
>
>
> On Thu, May 14, 2015 at 7:36 PM, Emanuel Allen <emanuelallen at hotmail.com>
> wrote:
>
>> It should allow for:
>>
>> arr.forEach(arr.push.only(1));//only return a function limiting the
>> number of arguments pass to it...
>>
>> But I guess this work too:
>> arr.forEach(e=>arr.push(e));
>>
>> But my goal was to just:
>> arr.forEach(arr.push);//will not work
>>
>> So this style I favorite since I want to avoid creating another function:
>> arr.forEach(arr.push.only(1));
>>
>> Even know only will return another function base on the parameter to you
>> pass to it.
>>
>> Still, I think it would be a great addition to the Function.prototype
>> object.
>>
>> JS4L
>>
>> On May 14, 2015, at 1:42 PM, Andrea Giammarchi <
>> andrea.giammarchi at gmail.com> wrote:
>>
>> `$1 => a.push($1)`
>>
>> fat arrow function shines mostly in these cases, not sure there's a need
>> for anything else.
>>
>> `($1, $2, $3) => a.push($2, $3)`
>>
>> Regards
>>
>> On Thu, May 14, 2015 at 5:26 PM, Emanuel Allen <emanuelallen at hotmail.com>
>> wrote:
>>
>>> That would be great to have an only method on Function.prototype.only
>>>
>>> It can take one to three parameters as arguments:
>>> -Only with using the first argument:
>>>
>>> SomeFunction.only(1);
>>> only allow the first argument in. It target the place holder so:
>>> fn.only(2) allow the two most left argument in.
>>>
>>> -Only with using the first 2 argument:
>>>
>>> SomeFunction.only(1,2);
>>> only allow the second argument in; the second argument target where to
>>> start and the first not how many to let in. So fn.only(2,3); let the third
>>> and fourth argument in.
>>>
>>> -Only with using all arguments placeholder:
>>>
>>> SomeFunction.only(1,2,true);
>>> This will denote that we start from the right and and let the second
>>> from last argument in
>>>
>>> The last parameter is informing if we should start left or right when
>>> choosing the parameters to let in. The default is false; start left to right
>>>
>>>
>>> Internally this could use the function's arguments object to query what
>>> to let in.
>>>
>>> JS4L
>>>
>>> On May 14, 2015, at 11:37 AM, Allen Wirfs-Brock <allen at wirfs-brock.com>
>>> wrote:
>>>
>>>
>>> On May 14, 2015, at 8:19 AM, Emanuel Allen wrote:
>>>
>>> Oh yes that is correct since push will push in elements separated by
>>> commas... Still my original problem is that I can't simply do
>>> arr.push(arr2.push); but it doesn't matter since it'll also push the three
>>> parameters into the array as well.
>>>
>>>
>>> exactly, see http://www.wirfs-brock.com/allen/posts/166
>>>
>>>
>>>
>>> Sent from my iPhone
>>>
>>> On May 14, 2015, at 10:49 AM, Erik Arvidsson <erik.arvidsson at gmail.com>
>>> wrote:
>>>
>>> Still, the callback for forEach is called with 3 arguments; value, index
>>> and the array.
>>>
>>> This is clearly documented in the spec and mdn and other resources.
>>>
>>> On Thu, May 14, 2015, 10:42 Garrett Smith <dhtmlkitchen at gmail.com>
>>> wrote:
>>>
>>>> On 5/14/15, Emanuel Allen <emanuelallen at hotmail.com> wrote:
>>>> > Surprise that I can't do arr1.forEeach(arr2.push);
>>>> >
>>>>
>>>> Check that line more carefully.
>>>>
>>>>
>>>> > Will throw an error.
>>>> >
>>>> > Using bind as:
>>>> >
>>>> > push = arr2.bind(push);
>>>>
>>>> Arrays don't have a bind method.
>>>> --
>>>> Garrett
>>>> @xkit
>>>> ChordCycles.com
>>>> garretts.github.io
>>>> personx.tumblr.com
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>>
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>>
>>
>
> _______________________________________________
> 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/20150514/134978fb/attachment-0001.html>
More information about the es-discuss
mailing list