2014-09-03 99 views
1

我在我的項目中使用了UnderscoreJs。我必須過濾包含具有屬性的對象的數組。我需要根據這些值進行過濾。該值可以是對象的任何屬性。例如:「迷你」應取兩者「豐田」和「本田」,因爲「小」,是存在兩個對象使用下劃線從對象列表中過濾匹配值

[{ name:"Toyota minivan", id:"506", size: "large" }, { name:"Honda Civic", id:"619", size: "mini" }] 

如何使用下劃線做的一部分。我嘗試了以下方法,但無法正常工作。

var searchStr="mini"; 
var evens = _.filter([arrayData], function(obj){ return _.contains(obj, searchStr); }); 

請問我能告訴我哪裏出錯了嗎?

回答

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

哦,我用簡單的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)); 
+0

此解決方案部分工作,因爲'obj.size =='mini''是硬編碼的。檢查應該通過驗證對象的所有屬性來完成,而不是特定於'size'屬性。 – zilcuanu 2014-09-03 13:39:56

+0

你的意思是部分?並且只有在將來您添加新屬性時,您接受的內容才能用於索引目的?索引更改,我在我的項目中使用了這種類型的比較,它工作正常。無論如何兄弟你得到答案這就是進出口。再見 – Sudarshan 2014-09-03 13:49:08