JavaScript动态命名与函数的参数。

时间:2013-11-05 14:05:25

标签: javascript variables dynamic naming

我一直在寻找答案但是徒劳无功。

我有一个以表名作为参数的函数。但这个名字可以是一个对象。

loadDataFromServer = function(dataTable) {
 //data fetch code ...
datadump[dataTable] = response.getDataTable();
}
loadDataFromServer(['gchart']['data'])

问题是我需要将数据存储在变量datadump.gchart.data中,但是" gchart.data"部分需要在调用函数时确定,而不是硬编码。 我的问题在于 datadump[['gchart']['data']]与...不一样 datadump['gchart']['data'](与datadump.gchart.data相同)

这里有人知道这样做的好方法吗?如果输入只是gchart_data,那么这很容易,但是即使需要将数据分配给blabla.blibli.bloebloe.stuff,函数也需要能够处理它。

提前致谢

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是:

function (result) {
    datadump = {};
    datadump.gchart = {};
    datadump.gchart.data = result.gchart.data;

    // or

    datadump.gchart = {
        data: result.gchart.data
    };    
}

虽然这样有点奇怪。您绝对需要gchart中的datadump吗?

分配到blabla.blibli.bloebloe.stuff之类的随机深度并不容易。

你可以像:obj["blabla.blibli.bloebloe.stuff"] = {};

那样扁平化

或者您可以编写递归合并,例如:

var a, b, c;
a = { foo: { ipsum: "lorem" } };
b = { bar: {}, foo: { abc: "def" } };
c = recursive_merge(a, b); // { foo: { ipsum: "lorem", abc: "def" }, bar: {} };

答案 1 :(得分:0)

您是否有函数获取字符串列表并迭代它们以递归方式访问(并在必要时创建)datadump的属性。我在这里使用arguments来使用参数列表本身,但你也可以只使用一个字符串数组的参数。

var loadDataFromServer = function() {
    var currObj = datadump;

    // iterate over the list of property names
    for(var i=0; i<arguments.length - 1; ++i) {
        var nextName = arguments[i];

        // if the object doesn't have this property, make it
        if(currObj[nextName] == undefined) {
            currObj[nextName] = {};
        }

        // use currObj's property as the new `currObj`
        currObj = currObj[nextName];
    }

    // load data into the final named property
    currObj[arguments[i]] = response.getDataTable();
}

loadDataFromServer('gchart', 'data');