一尘不染

jQuery对象上的递归迭代

json

前几天,我以为我在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
})

阅读 378

收藏
2020-07-27

共1个答案

一尘不染

.find(’selector’)方法基本上是.children()的可追溯版本,它将找到与选择器匹配的任何后代对象,而.children()则仅在第一级后代中找到对象。

第2次编辑(我第一次措辞不好,并弄乱了代码!):

好的,我认为此功能作为标志是没有意义的:您可以永远快乐地通过该对象进行递归(相信我,我打破了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)
    });
  }

}

function actualFunction(key, val) {
  /// do stuff
}
2020-07-27