Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环通过多维对象_Javascript_Sapui5 - Fatal编程技术网

Javascript 循环通过多维对象

Javascript 循环通过多维对象,javascript,sapui5,Javascript,Sapui5,有没有一种更有效的方法可以像下面这样在结构中循环,而不是对每一层都执行for() [{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...] 我需要过滤掉属性a包含特定数据的所有项目,如果属性b包含一些元素,则也需要循环这些元素。 我曾想过使用filter方法,但似乎不知道如何有效地使用它。欢迎来到这里,这里收集了一些很棒的方法 var collection = [{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...];

有没有一种更有效的方法可以像下面这样在结构中循环,而不是对每一层都执行for()

[{a:foo,b:[{a:bar},{a:bar}]},{a:bar,b:[]},...]
我需要过滤掉属性
a
包含特定数据的所有项目,如果属性
b
包含一些元素,则也需要循环这些元素。 我曾想过使用filter方法,但似乎不知道如何有效地使用它。

欢迎来到这里,这里收集了一些很棒的方法

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

递归就是你所需要的。你建议只在一个级别上使用过滤器,而在其他级别上使用递归和循环处理吗?你必须明确你想要得到的结果。在上面的例子中,我有多维对象数组,我想过滤掉所有具有特定字符串值属性的对象。搜索功能。您好,谢谢。我限制了第三方库的使用,但
flattedeep()
给了我澄清,我必须使用哈希表,将所有元素存储在一个级别中。函数式编程是处理此类情况的一种难以置信的工具,但也是一种新的困难思维方式。如果您对更多功能性编程感兴趣,可以在一个很棒的地方看到来自netflix的技术领先者Jafar Husain的更多内容-