2013-03-14 96 views
0

我正在嘗試使用默認對象中的值將未定義的屬性填充到對象中。Javascript:從默認對象中填充對象中的undefind屬性

我基本上想要做下劃線的「_.default」功能。

以下是我有:

 defaults: function(anyObject){ 

     var argArray = Array.prototype.slice.call(arguments,1); 

     for(var key in argArray){ 
     if(anyObject[key] == null){ 
      anyObject[key] = argArray[key]; 
      } 
     } return anyObject; 
     } 

我打電話跟下面傳遞函數:

defaults({extension : ".jpeg"}, {extension : ".gif", quality : "high"}); 

,我希望它返回如下:

=> {extension : ".jpeg", quality : "high"} 

任何建議?

+0

什麼是您當前的代碼嗎? – Blender 2013-03-14 03:22:46

+0

它返回類似於:{extension:「.jpeg」} {extension:「.gif」,quality:「high」} extension = .jpeg – swaggyP 2013-03-14 03:24:51

+0

我知道我與argArray存在問題 – swaggyP 2013-03-14 03:25:21

回答

1

我想嘗試這樣的事:

defaults: function(defaults) { 
    var args = Array.prototype.slice.call(arguments, 1); 

    for (var i = 0; i < args.length; i++) { 
     var arg = args[i]; 

     for (var key in arg) { 
      if (!(key in defaults)) { 
       defaults[key] = arg[key]; 
      } 
     } 
    } 

    return defaults; 
} 

這隻會增加新的鍵defaults

+0

這裏唯一的問題是我們正在使用另一個循環。如果我們有數百個其他論點會怎麼樣。 – swaggyP 2013-03-14 03:28:36

+0

@ShafiRazzack:這很像下劃線:http://underscorejs.org/docs/underscore.html – Blender 2013-03-14 03:30:08

0

嘗試這樣的:

defaults: function(obj, def) { 
    Object.keys(def).forEach(function(key) { 
    obj[key] = obj[key] || def[key]; 
    }); 
    return obj; 
}