Array#map does the non-trivial operation of copying the entire array. In the example for loging to the console, this behavior is unintended. Perhaps an underscore-like tap method should be considered to be added to the Array prototype for these cases.
On Fri, Oct 16, 2015 at 9:32 AM, Andrea Giammarchi < [email protected]> wrote: > Like I've written before, if you need to return an array you can use map > instead of forEach > > `arr.map(x => console.log(x) || x)` > > forEach has been like this since ever so while you wonder what kind of > code would look like based on the fact forEach doesn't return anything, I > actually wonder how come there are still people expecting forEach to return > something. > > So, it would be a breaking change and actually it's not needed since you > have map. > > If the new Array, and for debugging purpose, is not desired, use `var log > = DEBUG ? x => console.log(x) || x : x => x` and abuse it as much as you > like. > > Would any of this work? > > Regards > > > > On Fri, Oct 16, 2015 at 2:23 PM, Niloy Mondal <[email protected]> > wrote: > >> > That'd be a compatibility break. >> >> Ugh... you mean people actually depend on `forEach` returning `undefined` >> (which it always does) to do further task? >> >> I wonder what that kinda code would look like >.< >> >> On Fri, Oct 16, 2015 at 6:08 PM, Frankie Bagnardi <[email protected]> >> wrote: >> >>> That'd be a compatibility break. >>> >>> If we end up getting :: though: >>> >>> ```js >>> function logEach(){ >>> this.forEach((x) => console.log(x)); >>> return this; >>> } >>> >>> >>> const a = [1, 2, 3] >>> .map(square) >>> ::logEach() >>> .map(plus1) >>> .reduce(add); >>> ``` >>> >>> You could make that a global variable so you can sprinkle it around your >>> code in development. >>> >>> Having some developer tools in the language would be nice though. I >>> don't even think console.log is in the spec. A global like Debug.logThis >>> for example would be a more general ::-able. >>> >>> >>> On Fri, Oct 16, 2015 at 5:32 AM, Andrea Giammarchi < >>> [email protected]> wrote: >>> >>>> ```js >>>> const a = [1, 2, 3] >>>> .map(square) >>>> .map(x => console.log(x) || x ) >>>> .map(plus1) >>>> .reduce(add); >>>> ``` >>>> >>>> Regards >>>> >>>> >>>> On Fri, Oct 16, 2015 at 10:13 AM, Niloy Mondal < >>>> [email protected]> wrote: >>>> >>>>> Currently, `Array.prototype.forEach` returns `undefined`. It would be >>>>> more >>>>> useful if it returns the array itself. >>>>> >>>>> Say I have written some code like this... >>>>> >>>>> ```js >>>>> const a = [1, 2, 3] >>>>> .map(square) >>>>> .map(plus1) >>>>> .reduce(add); >>>>> ``` >>>>> >>>>> For some reason, I am not getting the expected output. For debugging, >>>>> I would >>>>> like the print the values after each step. My first initial reaction >>>>> is to >>>>> put a `forEach` step in between and print the values like so... >>>>> >>>>> ```js >>>>> const a = [1, 2, 3] >>>>> .map(square) >>>>> .forEach(x => console.log(x)) >>>>> .map(plus1) >>>>> .reduce(add); >>>>> ``` >>>>> >>>>> Unfortunately, this does not work as `forEach` returns `undefined`. I >>>>> now have >>>>> to comment out all the code below it. Having the _plug and play_ >>>>> behaviour for >>>>> `forEach` would be very convenient. >>>>> >>>>> _______________________________________________ >>>>> es-discuss mailing list >>>>> [email protected] >>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> es-discuss mailing list >>>> [email protected] >>>> https://mail.mozilla.org/listinfo/es-discuss >>>> >>>> >>> >> > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

