有没有一种方法来有条件地向Node.js中的对象添加值?

我有一个node.js脚本,如果存在本地或全局值,我将向对象添加键。 我觉得应该有一个很好的方法来简化这个,但我没有看到它。 有没有办法让这个代码更简洁:

var object = { defaultKey: defaultValue }; // Add some conditional keys based on local and global settings // With local settings taking precedence if (local.firstSetting || firstSetting) { entry.firstSetting = local.firstSetting || firstSetting; } if (local.secondSetting || secondSetting) { entry.secondSetting = local.secondSetting || secondSetting; } if (local.thirdSetting || thirdSetting) { entry.thirdSetting = local.thirdSetting || thirdSetting; } 

我想过把所有的键都添加到对象中,只是给它们赋值local.thirdSetting || thirdSetting local.thirdSetting || thirdSetting ,但我不认为这将是明智的,可能有一个未定义的键的键。

这里有共享的function,可以重构成一个function。

 function getSetting(name) { var setting = local[name] || globals[name] || entry[name]; if(setting) { entry[name] = setting; } } getSetting('firstSetting'); getSetting('secondSetting'); getSetting('thirdSetting'); 

Jaromanda X的修改:

 var t; if( t = local.firstSetting || firstSetting ) entry.firstSetting = t; if( t = local.secondSetting || secondSetting ) entry.secondSetting = t; if( t = local.thirdSetting || thirdSetting ) entry.thirdSetting = t; 

你可以使用像xtend这样的模块。

它允许您使用任意数量的将合并到一个对象中的对象。 考虑最右边的对象优先于所有其他对象。

这需要你的全局variables被分组到一个对象中,无论如何这可能是个好主意。

我现在正在做的是这样的:

  var pick = require('lodash.pick'); var identity = require('lodash.identity'); var object = pick({ defaultKey: defaultValue firstSetting: local.firstSetting || firstSetting, secondSetting: local.secondSetting || secondSetting, thirdSetting: local.thirdSetting || thirdSetting }, identity); 

这将从对象中过滤所有未定义的值(或精确的值)。