UnderscoreJS:有没有办法递归迭代JSON结构?

时间:2013-08-13 16:15:09

标签: javascript underscore.js lodash

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

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

      updateIconPathRecorsive(json);

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

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

1 个答案:

答案 0 :(得分:6)

您可以使用立即调用的命名函数表达式:

(function updateIconPathRecorsive(item) {
    if (item.iconSrc) {
        item.iconSrcFullpath = 'some value..';
    }
    _.each(item.items, updateIconPathRecorsive);
})(json);

但您的代码段也很好,不会cause problems in IE

下划线没有递归包装函数,它也不提供Y-combinator。但如果你愿意,你当然可以轻松create one yourself

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