0

我一直在四处寻找答案,但徒劳无功。

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

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.

提前致谢

4

2 回答 2

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: {} };
于 2013-11-05T14:08:13.033 回答
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');
于 2013-11-05T14:17:15.930 回答