2017-04-06 44 views
1

我有以下對象數組:過濾嵌套陣列與Lodash /使用Javascript

var sizeList = [ 
    { id: 1, title:"Test1", 
     type:[{name:"Big", present:false}, {name:"Small", present:true}, {name:"Medium", present:false}] 
    }, 

    { id: 2,title:"Test2", 
     type:[{name:"Big", present:false}, {name:"Small", present:true}, {name:"Medium", present:false}] 
    }, 
    { id: 3,title:"Test3", 
     type:[{name:"Big", present:false}, {name:"Small", present:true}, {name:"Medium", present:true}] 
    } 
    ] 

欲過濾此列表,其中媒體爲True。我現在有這個設置。

var specificSizes = _.filter(sizeList.type, { 'name': 'Medium', 'present': true }) 

這不斷返回一個空數組。我也試過這樣:

 specificSizes = _.filter(sizeList.type, function (type) { 
      return _.some(type, {'name': 'Medium', 'present':true}) 
     }); 
+0

標題是關於 「排序」?應該排序什麼? – RomanPerekhrest

+0

@RomanPerekhrest我的壞,我的意思是過濾。我會立即更新 – lost9123193

回答

4

隨着lodash,你可以換的條件相同的結構的測試,與原始對象。

_.filter(sizeList, { type: [{ name: 'Medium', present: true }] }) 

var sizeList = [{ id: 1, title: "Test1", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 2, title: "Test2", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 3, title: "Test3", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: true }] }],  
 
    result = _.filter(sizeList, { type: [{ name: 'Medium', present: true }] }); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

在普通的JavaScript,你可以使用Array#filter的外部陣列與Array#some檢查,如果一個條件得到滿足。

var sizeList = [{ id: 1, title: "Test1", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 2, title: "Test2", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: false }] }, { id: 3, title: "Test3", type: [{ name: "Big", present: false }, { name: "Small", present: true }, { name: "Medium", present: true }] }],  
 
    result = sizeList.filter(function (a) { 
 
     return a.type.some(function (b) { 
 
      return b.name === 'Medium' && b.present; 
 
     }); 
 
    }); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

這非常有用。非常感謝! – lost9123193