我一直在寻找答案但是徒劳无功。
我有一个以表名作为参数的函数。但这个名字可以是一个对象。
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
,函数也需要能够处理它。
提前致谢
答案 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');