循环通过多维对象

时间:2015-02-13 09:03:41

标签: javascript sapui5

是否有一种更有效的循环结构方式,如下所示,而不是为每个级别执行for()?

[{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...]

我需要过滤掉属性a包含某些数据的所有项目,如果它具有带有某些元素的属性b,那么也会循环显示这些属性。 我正在考虑使用过滤方法,但似乎无法有效地使用它。

2 个答案:

答案 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'; });

这不是每个人说的工作代码,你需要做一些工作来让循环遍历每个部分以单独展平它们,我只是给你工具来更容易地完成工作。