How to use a variable for a property name when using underscore.js findWhere function?

谁说胖子不能爱 提交于 2019-12-10 13:53:47

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!