繁体   English   中英

有没有办法简化有条件地使用node.js向对象添加值?

[英]Is there a way to simplify conditionally adding values to an object with 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 getSetting(name) {
    var setting = local[name] || globals[name] || entry[name];
    if(setting) {
        entry[name] = setting;
    }
}

getSetting('firstSetting');
getSetting('secondSetting');
getSetting('thirdSetting');

Jaromanda X's anwer的修改:

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这样的模块。

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

这需要将您的全局变量分组到一个对象中,无论如何这可能是一个好主意。

我现在正在做的是:

  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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM