2013-08-13 1 views
4
var updateIconPathRecorsive = function (item) { 
      if (item.iconSrc) { 
       item.iconSrcFullpath = 'some value..'; 
      } 

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

     updateIconPathRecorsive(json); 

Existe-t-il une meilleure façon d'utiliser une fonction? Je ne veux pas retirer la fonction de l'invocation, car elle est juste comme sophistiquée. Je veux probablement être capable d'écrire quelque chose dans les lignes de:UnderscoreJS: existe-t-il un moyen d'itérer récursivement une structure JSON?

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

Vous devez faire référence à la fonction à un moment donné. Votre premier extrait de code me va bien. – Halcyon

+0

Donc, fondamentalement, ce que vous voulez est un itérateur sur toutes les propriétés de l'objet récursivement? –

Répondre

6

Vous pouvez utiliser une expression de fonction appelée immédiatement, invoqué:

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

Mais votre extrait est bien aussi et la volonté pas cause problems in IE.

Il n'existe pas de fonction d'encapsulation récursive pour le trait de soulignement et elle ne fournit pas non plus de Y-combinator. Mais si vous voulez, vous pouvez facilement create one yourself bien sûr:

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