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.
Return Value: It returns a function that will return the specified property of an object.
Adding Underscore to a Node. Once added, underscore can be referred in any of the Node. js modules using the CommonJS syntax: var _ = require('underscore'); Now we can use the object underscore (_) to operate on objects, arrays and functions.
the Underscore Prefix in JavaScript Variables The underscore _ is simply an acceptable character for variable/function names; it has no additional functionality. Underscore variable is the standard for private variables and methods. There is no true class privacy in JavaScript.
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!
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With