Array.prototype.max and Array.prototype.min

Andrea Giammarchi andrea.giammarchi at gmail.com
Mon Feb 20 12:02:00 PST 2012


In that case, you should not even compare tomatoes and potatoes, a side
effect you may have when greater or "less than" is used in your example or
sort, without any callback to invoke able to compare, could produce:
unexpected results.

"a" and "0a" ... who's first here ?
[0] and {length:0}, who is max who is min?

etc

On Mon, Feb 20, 2012 at 8:32 PM, Xavier MONTILLET
<xavierm02.net at gmail.com>wrote:

> Because I'm not talking of arrays containing only numbers.
>
> On Mon, Feb 20, 2012 at 8:29 PM, Rick Waldron <waldron.rick at gmail.com>
> wrote:
> > Why add new api surface when this works as is:
> >
> > Math.max.apply( null, [ 1, 2, 3, 4 ] );
> > // 4
> >
> >
> > Math.min.apply( null, [ 1, 2, 3, 4 ] );
> > // 1
> >
> >
> >
> > On Mon, Feb 20, 2012 at 2:25 PM, Xavier MONTILLET <
> xavierm02.net at gmail.com>
> > wrote:
> >>
> >> Hi,
> >>
> >> I think it'd be nice to have Array.prototype.max and
> Array.prototype.min.
> >>
> >> What they would do is this:
> >>
> >> Array.prototype.max = function ( f ) {
> >>    return this.sort( f )[ this.length - 1 ];
> >> };
> >> Array.prototype.min = function ( f ) {
> >>    return this.sort( f )[ 0 ];
> >> };
> >>
> >> Of course, that's not how they would actually be implemented (sorting
> >> the whole array to get the max/minimum is ridiculous) but I wrote them
> >> that way so that we clearly see the behavior when a function is given
> >> as argument: just as with Array.prototype.sort, the function is used
> >> instead of < in the comparisons.
> >>
> >> Here is a more efficient implementation:
> >>
> >> Array.prototype.max = function ( f ) {
> >>    var max = this[ 0 ];
> >>    var i;
> >>    var l = this.length;
> >>    var item;
> >>    if ( f ) {
> >>        for ( i = 1; i < l; ++i ) {
> >>            item = this[ i ];
> >>            if ( item > max ) {
> >>                max = item;
> >>            }
> >>        }
> >>    } else {
> >>        for ( i = 1; i < l; ++i ) {
> >>            item = this[ i ];
> >>            if ( f( item, max ) === 1 ) {// maybe it should be -1... I
> >> never remember...
> >>                max = item;
> >>            }
> >>        }
> >>    }
> >>    return max;
> >> };
> >> _______________________________________________
> >> 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/20120220/b1f0cf26/attachment.html>


More information about the es-discuss mailing list