Skip to main content

Bug Tracker

Side navigation

#9944 closed enhancement (plugin)

Opened July 30, 2011 07:51PM UTC

Closed March 10, 2012 04:25AM UTC

Pass new array as third argument to jQuery.grep and jQuery.map callbacks

Reported by: anonymous Owned by:
Priority: low Milestone: None
Component: misc Version: 1.6.2
Keywords: needsreview Cc:
Blocked by: Blocking:
Description

Providing the new Array being constructed via jQuery.grep() to the callback provided would allow inquiry into the new Array that could be useful when determining the return value.

https://github.com/jquery/jquery/blob/1.6.2/src/core.js#L722

Change:

retVal = !!callback( elems[ i ], i );

to:

       // added new Array as arg-----v
retVal = !!callback( elems[ i ], i, ret );

Possible usage example:

var arr = 
$.grep(
    $('div').map(function() { return $(this).attr('rel'); } ).get(),
    function( v, i, arr ) { return $.inArray( v, arr ) === -1; } // exclude dupes
);

**jsfiddle:** http://jsfiddle.net/b7hDr/


I would also be inclined to suggest this for jQuery.map():

var arr = 
$.map($('div'), function( v, i, arr ) { 
    var rel = $(v).attr('rel'); 
    return $.inArray( rel, arr ) === -1 ? rel : void 0;
});

**jsfiddle:** http://jsfiddle.net/b7hDr/1/

...although I don't know if it would interfere with the internal arg parameter.

https://github.com/jquery/jquery/blob/1.6.2/src/core.js#L742

     // make room for "ret"?------v
value = callback( elems[ i ], i, ret, arg );

https://github.com/jquery/jquery/blob/1.6.2/src/core.js#L752

     // make room for "ret"?----------v
value = callback( elems[ key ], key, ret, arg );

Attachments (0)
Change History (2)

Changed August 18, 2011 06:41AM UTC by addyosmani comment:1

component: unfiledmisc
keywords: → needsreview
priority: undecidedlow
status: newopen

I don't have any particular opinions on this enhancement, but I'm moving this to either the vote queue or for further review.

Changed March 10, 2012 04:25AM UTC by dmethvin comment:2

resolution: → plugin
status: openclosed

Sorry but we don't need to complicate this highly-used code for edge cases. It would be better to do this as a plugin with the additional semantics.