遍历多维对象
Loop through multi dimensional object
是否有比对每个级别执行 for() 更有效的循环结构的方法?
[{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...]
我需要过滤掉所有 属性 a
包含特定数据的项目,如果它有 属性 b
和一些元素,那么也循环遍历这些元素。
我正在考虑使用过滤器方法,但似乎无法弄清楚如何有效地使用它。
欢迎使用 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'; });
据说这不是工作代码,您需要做一些工作以使循环遍历每个部分以单独展平它们,我只是为您提供了使工作更轻松的工具。
猜猜,我迟到了,但我还是会这样做...
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;
}
是否有比对每个级别执行 for() 更有效的循环结构的方法?
[{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...]
我需要过滤掉所有 属性 a
包含特定数据的项目,如果它有 属性 b
和一些元素,那么也循环遍历这些元素。
我正在考虑使用过滤器方法,但似乎无法弄清楚如何有效地使用它。
欢迎使用 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'; });
据说这不是工作代码,您需要做一些工作以使循环遍历每个部分以单独展平它们,我只是为您提供了使工作更轻松的工具。
猜猜,我迟到了,但我还是会这样做...
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;
}