2017-04-06 28 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