问题
I'm having trouble figuring out how to set a property dynamically in underscore.js while using the _.findWhere function.
Here's the documentation for the function:
findWhere_.findWhere(list, properties)
Looks through the list and returns the first value that matches all of the key-value pairs listed in properties.
If no match is found, or if list is empty, undefined will be returned.
_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"}); => {year: 1918, newsroom: "The New York Times", reason: "For its public service in publishing in full so many official reports, documents and speeches by European statesmen relating to the progress and conduct of the war."}
Modeling the example in the docs, I want to set the property to search for dynamically:
var publicServicePulitzers = [
{"newsroom":"The New York Times", "year":2013 },
{"newsroom":"The Los Angeles Times", "year":2012 }
];
var myprop = 'newsroom';
_.findWhere(publicServicePulitzers, { myprop : "The New York Times"});
The result is undefined.
I also tried:
_.findWhere(publicServicePulitzers, {eval(myprop): "The New York Times"});
The error message is SyntaxError: missing : after property id
How can I accomplish this?
Thanks for any help.
回答1:
Just figured it out. The second parameter to findWhere is an object. So create the object first and pass that to the function:
var myprop = 'newsroom';
var value = 'The New York Times';
var search_obj = {};
search_obj[myprop] = value;
var result = _.findWhere(publicServicePulitzers,search_obj);
Works!
回答2:
Don't use findWhere
for this, but a more generic find:
_.find(publicServicePulitzers, function(prize) {
return price[myprop] == "The New York Times";
});
If you really need to use findWhere
, have a look at Using a variable for a key in a JavaScript object literal.
来源:https://stackoverflow.com/questions/21009572/how-to-use-a-variable-for-a-property-name-when-using-underscore-js-findwhere-fun