jQuery对象的递归迭代

use*_*716 29 iteration recursion jquery json object

前几天我以为我在jQuery中看到了一个对象迭代器,它有一个可以设置为递归迭代子对象的标志.我认为它是jQuery.each()的一部分,但现在我没有在文档中看到这种功能.

在jQuery中是否有任何可以自动递归的迭代器?

(我知道如何在javascript中执行此操作.只是想知道我是否真的看到了我以为我看到的内容.)

非常感谢!

编辑:要清楚,我正在考虑像jQuery.each()这样的实用程序方法,它将在javascript对象及其嵌套对象上递归迭代.

给定下面的示例,each()方法将遍历所有对象,包括myobj.obj2.key2中的嵌套对象.

我本可以发誓我在jQuery文档中看到了一些关于它的东西,但现在我找不到了.

谢谢.

var myobj = {
    obj1: {key1:'val1', key2:'val2'},
    obj2: {key1:'val1', key2: {nest1:'val1', nest2:'val2', nest3:'val3'}},
    obj3: {key1:'val1', key2:'val2'}
}

$jQuery.each(myobj, function(key,val) {
    // Code to run over each key/val pair
    // Does so recursively to include all nested objects
})
Run Code Online (Sandbox Code Playgroud)

Ed *_*mes 37

.find('selector')方法基本上是.children()的重复版本,并且会找到与选择器匹配的任何后代对象,而.children()只查找第一级后代中的对象.

第二次编辑(我第一次表达得非常糟糕,并且稍微搞砸了代码!):

好吧,我不认为这个功能作为一个标志是有意义的:你可以非常高兴地永远地通过该对象递归(相信我,我打破了firefox这样做),所以你需要某种互动来确保你只是在递归时子对象是有效的递归候选者.

你需要做的就是像这样拆分函数:

var myobj = {
    obj1: {key1:'val1', key2:'val2'},
    obj2: {key1:'val1', key2: {nest1:'val1', nest2:'val2', nest3:'val3'}},
    obj3: {key1:'val1', key2:'val2'}
}

$jQuery.each(myobj, function(key, val) { recursiveFunction(key, val) });

    function recursiveFunction(key, val) {
        actualFunction(key, val);
        var value = val['key2'];
        if (value instanceof Object) {
            $.each(value, function(key, val) {
                recursiveFunction(key, val)
            });
        }

    }
Run Code Online (Sandbox Code Playgroud)

function actualFunction(key, val) { /// do stuff }

var myobj = {
    obj1: {key1:'val1', key2:'val2'},
    obj2: {key1:'val1', key2: {nest1:'val1', nest2:'val2', nest3:'val3'}},
    obj3: {key1:'val1', key2:'val2'}
}

$jQuery.each(myobj, function(key, val) { recursiveFunction(key, val) });

    function recursiveFunction(key, val) {
        actualFunction(key, val);
        var value = val['key2'];
        if (value instanceof Object) {
            $.each(value, function(key, val) {
                recursiveFunction(key, val)
            });
        }

    }
Run Code Online (Sandbox Code Playgroud)

function actualFunction(key, val) { /// do stuff }


CBa*_*arr 9

上面是@Ed Woodcock版本的略微简化版本.我需要使用它来输出带有命名链接的HTML项目符号列表.

var list = "<ul>";
$.each(data, recurse);

function recurse(key, val) {
    list += "<li>";
    if (val instanceof Object) {
        list += key + "<ul>";
        $.each(val, recurse);
        list += "</ul>";
    } else {
        list += "<a href='" + val + "'>" + key + "</a>";
    }
    list += "</li>";
}
list += "</ul>";

$("#container").html(list);
Run Code Online (Sandbox Code Playgroud)