如果我使用变量作为键,如何访问多级属性?
以下方法不起作用:
var obj = {
first: {thirst: "yo"},
second: {beckon: "dud"}
}
var key = "first.thirst";
var result = obj[key];
如果我使用变量作为键,如何访问多级属性?
以下方法不起作用:
var obj = {
first: {thirst: "yo"},
second: {beckon: "dud"}
}
var key = "first.thirst";
var result = obj[key];
在 JavaScript 中,如果您将字符串用作属性名称,那么没有任何禁止使用的字符,包括句点。因此,您可以轻松地拥有类似于以下对象属性:
var o = {
'first.second.third': 'value';
}
鉴于此,显然无法实现您的解决方案。
但是,只要您在属性命名中不使用句号,就可以创建一个执行此操作的函数:
function resolve(obj, path){
path = path.split('.');
var current = obj;
while(path.length) {
if(typeof current !== 'object') return undefined;
current = current[path.shift()];
}
return current;
}
那么你可以这样调用:
var key = "first.thirst";
var result = resolve(obj, key);
var traverse = function (obj, keys) {
return keys.split('.').reduce(function (cur, key) {
return cur[key];
}, obj);
};
var obj = {
first: { thirst: 'yo' },
second: { beckon: 'dud' }
};
var keys = 'first.thirst';
console.log(traverse(obj, keys));
function getMultiLevelProp(obj, key){
if(typeof obj == "object"){
var keyQueue = key.split(".").reverse();
var tempVal = obj, currentKey;
while((currentKey = keyQueue.pop()) != undefined)
tempVal = tempVal[currentKey];
return tempVal;
}
return false;}
eval
或编写自定义函数遍历树,否则无法实现。 - Rob W