简体   繁体   中英

is there a way to send in parameters with JavaScript Array.prototype.find?

Consider the following, standard use of Array.prototype.find:

var getObject = myObjects.find(callback);

with:

var callback = function(object) {
    return object === 'myValue'
}

Is there a way to inject another parameter? So we'd have, say:

var getObject = myObjects.find(callback, mySearchTerm);

with:

var callback = function(element, mySearchTerm) {
    return element === mySearchTerm;
}

?

var term = 'some term';
var getObject = myObjects.find(function(item){return callback(item, term)});

You could use a closure over the parameter, like

var callback = function (value) {
        return function(object) {
           return object === value;
        };
    };

Call the callback with parameter

var getObject = myObjects.find(callback(mySearchTerm));

You could use a wrapper function for a reusable solution.

Example:

 var myObjects = [1, 2, 2, 3, 4]; var search = function(data, mySearchTerm) { var callback = function(element) { return element === mySearchTerm; }; return data.find(callback) }; var getObject = search(myObjects, 2); console.log(getObject); 

Or

 var myObjects = [1, 2, 2, 3, 4]; var mySearchTerm = 2; var callback = function(object) { return object === mySearchTerm; }; var getObject = myObjects.find(function(element) { return callback(element, mySearchTerm); }); console.log(getObject); 

Here is an example:

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

function myFind(what){
  function findCherries(fruit) { 
      return fruit.name === what;
  }
  return inventory.find(findCherries)
}

console.log(myFind("cherries")); 

But again, IE doesn't support array.find() !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM