2013-04-11 39 views
1
/** 
    * recursively build a nested Backbone.Model or Backbone.Collection 
    * from a deep JSON structure. 
    * 
    * undefined for regex values 
    */ 
    exports.modelify = function modelify (data) { 

     if (_.isArray(data)) { 
      return new Backbone.Collection(_.map(data, modelify)); 
     } 

     else if (_.isObject(data) && !_.isDate(data)) { 

      var m = util.mapo(data, function(val, key) { 
       return [key, modelify(val)]; 
      }); 

      return new Backbone.Model(m); 
     } 
     else { 
      // data is a primitive or a date 
      return data; 
     } 
    } 

    var mapo = exports.mapo = _.compose(_.object, _.map); 
+0

爲什麼減少?如果這是一個性能問題,你可能更適合構建一個循環遍歷樹的函數。 reduce是爲數組設計的,所以嘗試使用這種方法是不合理的。 – olleicua

回答

1

這可能是「作弊」,但我想知道是否可以使用lodash而不是下劃線。這是一個更加祕密的替代品的下降。

lodash版本的擴展/分配允許您在從源複製到目標時爲屬性分配提供回調。你可以在回調中完成所有的骨幹轉換和遞歸。有了這個說法,爲了更具體地回答你的原始問題,你會想在對象的_.pairs上做你的減少。