【问题标题】:Use variable value as variable name in function在函数中使用变量值作为变量名
【发布时间】:2012-03-23 08:00:09
【问题描述】:

在下面的代码中:

DbModels.prototype.updateById = function(_collection, id, field, value, callback) {
    this.getCollection(_collection, function(error, sel_collection) {
      if( error ) callback(error)
      else {
        sel_collection.update({_id: ObjectID.createFromHexString(id)}, {$set: {$[field].value:value}}, function(error, updated) {
          if( error ) callback(error)
          else callback(null, updated);
        });
      }
    });
};

我想用变量字段的值作为$set中的变量名。我尝试使用以下代码 $[field].value (如您在上面的代码中所见),它不起作用。有什么建议可以解决这个问题吗?

谢谢!

【问题讨论】:

  • 答案很简单:不要在需要像动态变量名这样的 hack 的地方创建凌乱的代码。
  • 这种方法到底有什么问题?我打算做的是传递需要更新的属性,然后(动态)只更新更改的属性。

标签: javascript node.js mongodb


【解决方案1】:

在 javascript 中没有像 php ${$var_name} 这样的语法;

可以使用this[var_name]window[var_name](用于浏览器中的全局变量),但是除了eval 之外,没有办法在当前范围内获取局部变量,这绝对被认为是不好的。

考虑对变量“作用域/命名空间”使用散列(对象)。

【讨论】:

  • 最后一部分的意思是:var parameters = {};参数[firstVariableName] = 字段; sel_collection.update({_id: ObjectID.createFromHexString(id)}, {$set: {parameters[firstVariableName]:value}},........
  • 是的,除非不能以这种方式编写对象字面量。它实际上可以做得更简单一点:var setParameters = {}; setParameters[parameters[firstVariableName]] = value; sel_collection.update({_id: ObjectID.createFromHexString(id)}, {$set: setParameters}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多