Javascript/Node.js我可以使用hashmap有选择地执行函数吗?

Javascript/Node.js Can I use Hashmap to Selectively Execute Functions

本文关键字:选择地 执行 函数 hashmap Node js 我可以 可以使 Javascript      更新时间:2023-09-26

我的应用程序有一个首选项列表,存储在JSON文件(preferences.json)中。我有一个相应的功能列表,我想根据首选项有选择地使用这些功能。每个函数的结果将添加到报告中。

preferences.json看起来像这样:

{
    "getTemperature": true;
    "getHumidity": false;
    "getPrecipitation": true
}

这些函数位于我正在导入的模块中(函数.js)。他们像这样:

var getTemperature = function(){
  //retrieve temperature;
  //append temperature to file;
}
var getHumidity = function(){
  //retrieve humidity;
  //append humidity to file;
}
var getPrecipitation = function() {
  //retrieve precipitation;
  //append precipitation to file;
}

到目前为止我尝试过的方法,显然不起作用

var prefs = require('./preferences.json');
var funcs = require('./functions.js');
for (key in prefs){
  if(prefs[key]) {
    funcs.key(); // <- Doesn't work, b/c 'key()' isn't a function. But you get the idea.
  }
}

如果您知道如何完成此操作,请告诉我。

我还没有尝试过的一个想法(它需要大量的代码重写)是将函数与首选项虚拟变量一起嵌套在伪类中。然后,我将使用首选项文件创建伪类的实例。我的想法是伪类实例将具有完整的首选项,我可以将选择性执行硬编码到每个函数中(即if(myInstance.tempBool){myInstance.getTemperature()})。不过,我宁愿迭代,因为还有更多函数,将来我可能会添加更多函数。

有什么想法吗?

从我上面评论的链接中调整答案并将其应用于您的情况:

您的函数.js文件将包含以下内容:

exports.weatherFunctions = {
    var getTemperature = function(){
      //retrieve temperature;
      //append temperature to file;
    }
    var getHumidity = function(){
      //retrieve humidity;
      //append humidity to file;
    }
    var getPrecipitation = function() {
      //retrieve precipitation;
      //append precipitation to file;
    }
}

按照上面尝试的那样,在您的文件中要求这样做:

var prefs = require('./preferences.json');
var funcs = require('./functions.js')

从这里您可以根据需要循环。

for (key in prefs){
  if(prefs[key]) {
    funcs.weatherFunctions[key](); 
  }
}

您可以使用函数名称作为键和函数作为值创建一个对象:

funcs = {
  getTemperature: function(){
    //retrieve temperature;
    //append temperature to file;
  }
  getHumidity: function(){
    //retrieve humidity;
    //append humidity to file;
  }
  getPrecipitation: function() {
    //retrieve precipitation;
    //append precipitation to file;
  }
}

如果要将它们放在单独的文件中并将它们与 var funcs = require('./functions.js'); 一起使用,您可以放置:

module.exports = funcs

现在您的主文件几乎可以按原样工作。 您需要将行funcs.key();更改为 funcs[key]();