2013-03-14 90 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; 
}