使用下划线从对象列表中过滤匹配值

时间:2014-09-03 11:05:30

标签: javascript arrays underscore.js

我在我的项目中使用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); });

能告诉我出错的地方吗?

2 个答案:

答案 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;
    });
});

DEMO

答案 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));