我们说我们有以下数据:
[
{
"name": "Experiment type10",
"scale": ["Whole Brain", "Cell"],
"datatype": "table"
},
{
"name": "Experiment type11",
"scale": ["Tissue", "Cell"],
"datatype": "image"
},
{
"name": "Experiment type12",
"scale": "Tissue",
"datatype": "text"
}
]
使用下划线._where
我可以使用数据类型" text"过滤掉对象,但是我无法过滤掉所有对象,其等级为"纸巾" ;因为它在一个数组中。是否可以优雅地进行这种类型的过滤?
答案 0 :(得分:2)
var hasTissues = function(item){
return item.scale === 'Tissue' || _.contains(item.scale, 'Tissue');
}
var tissues = _.filter(list, hasTissues);
答案 1 :(得分:2)
_.where
只是通用_.filter
的捷径。 _.filter
使用谓词函数而不是简单的属性列表:
_(array).filter(function(h) {
if(h.datatype !== 'text')
return false;
if(_(h.scale).isArray())
return _(h.scale).indexOf('Tissue') !== -1;
return h.scale === 'Tissue';
});
有多种方法可以检查h.scale
是否包含'Tissue'
:您可以使用简单的for
- 循环代替_.indexOf
,您可以使用{ {1}}代替typeof
,您可以说_.isArray
并检查数组a = _([ h.scale ]).flatten()
,...