UnderscoreJS:有没有一种递归迭代JSON结构的方法?

4
 var updateIconPathRecorsive = function (item) {
          if (item.iconSrc) {
              item.iconSrcFullpath = 'some value..';
          }

          _.each(item.items, updateIconPathRecorsive);
      };

      updateIconPathRecorsive(json);

有没有一种不使用函数的更好方法? 我不想将函数从调用中移开,因为它就像一个复杂的for循环。我可能希望能够写出类似以下的内容:

   _.recursive(json, {children: 'items'}, function (item) {
      if (item.iconSrc) {
          item.iconSrcFullpath = 'some value..';
      }
   }); 

你需要在某个时候引用这个函数。你的第一个代码片段看起来很好。 - Halcyon
所以基本上你想要的是一个可以递归地迭代所有对象属性的迭代器? - Benjamin Gruenbaum
1个回答

6
您可以使用立即调用的命名函数表达式:
(function updateIconPathRecorsive(item) {
    if (item.iconSrc) {
        item.iconSrcFullpath = 'some value..';
    }
    _.each(item.items, updateIconPathRecorsive);
})(json);

但是你的代码片段也很好,不会在IE中引起问题

Underscore没有递归包装函数,也没有提供Y组合子。但如果你想要,当然可以自己创建一个

_.mixin({
    recursive: function(obj, opt, iterator) {
        function recurse(obj) {
            iterator(obj);
            _.each(obj[opt.children], recurse);
        }
        recurse(obj);
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接