是否有一种更有效的循环结构方式,如下所示,而不是为每个级别执行for()?
[{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...]
我需要过滤掉属性a
包含某些数据的所有项目,如果它具有带有某些元素的属性b
,那么也会循环显示这些属性。
我正在考虑使用过滤方法,但似乎无法有效地使用它。
答案 0 :(得分:0)
function filter(obj){
if(obj.constructor === Array){
var arry = [];
obj.forEach(function(item){
var tmp = filter(obj);
if(tmp) arrypush(tmp);
});
return arry;
}
if(obj.a && obj.a.contains('ignore')) // modify this to your filter condition
return;
if(!ob.b || !obj.b.constructor === Array)
return obj;
var newObj={};
Object.keys(obj).forEach(function(key){
newObj[key] = obj[key];
});
newObj.b = filter(obj.b);
return newObj;
}
答案 1 :(得分:-1)
欢迎来到lodash及其精彩方法的集合。
var collection = [{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...];
var filteredCollection = _.chain(collection)
.flattenDeep()
.filter(function(item) { return item.a === 'foo'; });
这不是每个人说的工作代码,你需要做一些工作来让循环遍历每个部分以单独展平它们,我只是给你工具来更容易地完成工作。