在javascript中,我想通过它的名称选择某个属性,该属性存储在字符串中。我知道window[someString]
是正确的选择。它工作时,someString = "somevariable"
,但不幸的是,我的程序也将有字符串,如someobject.someproperty
。
问题是,给定代码
someString = "one.two.three";
one = {
two: {
three: "This is the value that I want to get"
}
};
// window[someString] does not work.
,我怎么能得到one.two.three
的值使用someString
的值,没有使用eval
的值?
使用split创建递归方法
var someString = "one.two.three";
var keys = someString.split('.');
one = {
two: {
three: "This is the value that I want to get"
}
};
function getinnerProperty(object, keys) {
var key = keys.shift();
if (keys.length) {
var nestedObject = object[key];
return getinnerProperty(nestedObject, keys);
} else {
return object[key];
}
}
console.log(getinnerProperty(window, keys));
您可以编写一个使用split
并迭代遍历对象树的函数:
var someString = "one.two.three";
var one = {
two: {
three: "This is the value that I want to get"
}
};
function getValue(keyStr) {
var keys = keyStr.split('.');
var result = global;
for (var i = 0; i < keys.length; i++) {
result = result[keys[i]];
}
return result != global ? result : undefined;
}
getValue(someString);