根据参数动态调整对象名称

时间:2014-11-02 01:11:22

标签: javascript apache function variables dynamic

我在Linux机器上的apache webserver上运行脚本。基于参数我想更改变量的名称(或设置它)

这个想法是humDev(第11和14行)被命名为humDev21。其中devId是本例中的数字21。

我的脚本如下所示:

function getHumDev(devId){
  $.ajax({
    async: false,
    url: "/url" + devId,
    success: function(result) {
      var array = result["Device_Num_" + devId].states;
      function objectFindByKey(array, key, value) {
        for (var i = 0; i < array.length; i++) {
         if (array[i][key] === value) {
           humDev = array[i].value;
         }
       }
    return humDev;
    };
    objectFindByKey(array, 'service', 'some');
  }
 });
};

如果我看错了方向,请告诉我。也许是我尝试的不良做法。我想让对象具有唯一名称的原因是因为该函数基于数组的内容被另一个函数多次调用。但是当我使用没有数字后缀的humDev对象使其唯一时,对象的内容在不同的调用之间变得混杂。

1 个答案:

答案 0 :(得分:0)

我可能不在基地,但我根据我对你要做的事情的理解做出一些假设。

首先,您需要了解如何在node.js中执行文件I / O.那么让我们从那里开始:

var pathToFile, //set with file path string
    fs = require('fs'), //require the file i/o module API
    bunchOfHumDevs = {},
    fileContents; //we'll cache those here for repeated use

fs.readFile(pathToFile, function(err, result) {
    if (err) {
        throw new Error(); //or however you want to handle errors
    } else {
        fileContents = JSON.parse(result); //assumes data stored as JSON
    }
});

function getHumDev(devId) {

    //first make sure we have fileContents, if not try again in 500ms
    if (!fileContents) {
        setTimeout(function() {
            getHumDev(devId);
        }, 500);
    } else {
        var array = fileContents["Device_Num_" + devId].states,
            i = array.length,

        //if 'service' and 'some' are variable, make them params of
        //getHumDev()
        while (i--) {
            if (array[i]['service'] === 'some') {

                //store uniquely named humDev entry 
                bunchOfHumDevs['humDev' + devId.toString()] = array[i].value;
                break; //exit loop once a match is found
            }
        }
    }
    return null;
}

getHumDev(21); 

假设找到了devId 21的匹配项,bunchOfHumdevs现在将拥有一个属性&#39; humDev21&#39;那是有问题的对象(值?)。此外,fileContents现已缓存在程序中,因此您每次调用此函数时都不必重新打开它。