2015-11-24 117 views
1

我目前正在嘗試基於子對象篩選對象數組。對象的結構是這樣的:如何使用Underscore過濾基於嵌套對象的數組對象?

{ 
    name: 'foo', 
    status: 'fail', 
    rules: [ 
     { 
      name: 'bar', 
      result: 'fail' 
     }, 
     // so on and so forth ~13 rules 
    ] 
} 

我想我的結果過濾到所有具有對象的rule astatus: failrule bstatus: pass

到目前爲止,這是我:

這適用於一個且只有一個參數:

var data = _.filter(this.resultsCollection.toJSON(), function(obj) { 
    return _.some(obj.rules, {name:params.rules[0].name}); 
}); 

對我來說,這應該工作,更是我所需要的,因爲_.some只需要一個參數,但不(僅僅將其更改爲_.where):

var data = _.filter(this.resultsCollection.toJSON(), function(obj) { 
    return _.where(obj.rules, {name:params.rules[0].name}); 
}); 

真的是我想將更多的東西是這樣的:

var data = _.where(this.resultsCollection.toJSON(), { 
    rules: params.rules // params.rules being the array with name and result 
}); 

它的作品被這樣濾除:

var data = _.where(this.resultsCollection.toJSON(), {status:'fail'}); 

回答

0

結束了使用香草的JavaScript過濾器。

var data = this.resultsCollection.toJSON().filter(function(obj) { 
     for (var i = 0; i < params.rules.length; i++) { 
      var rule = params.rules[i]; 
      for (var k = 0; k < obj.rules.length; k++) { 
       if(obj.rules[k].name.toLowerCase() == rule.name.toLowerCase()) { 
        if(obj.rules[k].result.toLowerCase() !== rule.result.toLowerCase()) { 
         return false; 
        } else { 
         break; 
        } 
       } 
       if(i === obj.rules.length - 1) return false; 
      } 
     } 
     return true; 
    }); 
相關問題