我在使用像
这样的函数找出如何访问多级深层对象中的变量时遇到了麻烦getLanguageVariable("form.passwordSwitch.disabled");
以及以下对象作为示例
var language = {
"de": {
"form": {
"passwordSwitch": {
"enabled": "Der Klartext-Modus ist aus. Aktivieren?",
"disabled": "Der Klartext-Modus ist an. Deaktivieren?"
}
}
}
}
尝试将字符串拆分为点字符,然后创建
的字符串表示形式language["de"]["form"]["passwordSwitch"]["enabled"]
用于访问对象及其属性。我用了这段代码:
var stack = variableIdentifier.split(".");
var reference = "";
for (i = 0; i < stack.length; i++) {
if (i == 0) reference += stack[i];
else reference += "[\"" + stack[i] + "\"]";
}
任何线索如何动态访问对象的特性,因为你不知道它有多深?
答案 0 :(得分:1)
我几天前在蟒蛇中实现了相同的功能。基本上,当您不知道对象的深度时,请使用递归模式。
function getPath(obj, path)
{
path = path.split('.');
return _getpath(obj, path);
}
function _getPath(obj, path)
{
if(!path.length)
return obj;
p = path.shift();
if(obj[p])
return _getPath(obj[p], path);
return undefined;
}
答案 1 :(得分:0)
你可以做这样的事情;
function getLanguageVariable(path) {
// I don't know how you determine "de", but this should be
// easy to customise
var next = language.de;
// Make path = ["form","passwordSwitch","disabled"];
path = path.split(/\./);
// Loop over path, and for each pass, set next to the next key
// e.g. next = next["form"];
// next = next["passwordSwitch"]
// next = next["disabled"]
while (path.length && (next = next[path.shift()]) && typeof next === "object" && next !== null);
// Check we have used all the keys up (path.length) and return
// either undefined, or the value
return path.length ? undefined : next;
}
为了将来的信息,请注意您拥有的是通过对象文字语法定义的对象,而不是JSON;有关详细信息,请参阅What is the difference between JSON and Object Literal Notation?