Javascript / Node.js我可以使用Hashmap选择性地执行函数

时间:2013-09-08 23:22:13

标签: javascript json node.js hashmap

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

preferences.json看起来像这样:

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

这些功能在我导入的模块(functions.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()})。我宁愿迭代,因为还有更多功能,我将来可能会添加更多功能。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

根据我在上面评论中提供的链接调整答案并将其应用于您的情况:

你的functions.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](); 
  }
}

答案 1 :(得分:0)

您可以创建一个对象,其中函数的名称为键,函数的值为:

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