5

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.

2 Answers 2

8

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!

Sign up to request clarification or add additional context in comments.

1 Comment

Right but keep in mind that findWhere is really just a find call in disguise so building the search_obj for a single value doesn't do that much for you (or maybe it does depending on your tastes :).
3

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.