我在我的项目中使用UnderscoreJs
。我必须过滤包含具有属性的对象的数组。我需要根据值进行过滤。该值可以是对象的任何属性。例如:“迷你”应该取“丰田”和“本田”,因为“迷你”作为两个对象的一部分存在
[{ name:"Toyota minivan", id:"506", size: "large" }, { name:"Honda Civic", id:"619", size: "mini" }]
如何使用Underscore。我尝试了以下方法,但没有工作。
var searchStr="mini";
var evens = _.filter([arrayData], function(obj){ return _.contains(obj, searchStr); });
能告诉我出错的地方吗?
答案 0 :(得分:4)
_.contains
仅适用于数组,因此您需要先从每个对象中获取值,然后检查其中是否包含搜索字符串。我在此示例中使用了some
,并使用indexOf
来匹配字符串。
var searchStr="mini";
var mini = _.filter(arr, function (obj) {
return _.values(obj).some(function (el) {
return el.indexOf(searchStr) > -1;
});
});
答案 1 :(得分:1)
好吧,我已经用简单的if条件做了这个,以便将来如果你想在一个数组中列出mini并在一个数组中大,这样你就可以轻松完成。我检查了对象属性,如果匹配,则分配给新列表。这是我的代码。并在这里查看演示fiddle
var list=[{ name:"Toyota minivan", id:"506", size: "large" },
{ name:"Honda Civic", id:"619", size: "mini" },
{name:"zen",id:"606",size:"mini"}];
var result=_.filter(list, function(obj){
if(obj.size=='mini'){
var matchedcars=obj;
console.log("result"+JSON.stringify(matchedcars));
}
return matchedcars;
});
alert("result"+JSON.stringify(result));