遍历多维对象

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;
}