按字符串选择全局变量,包括子属性



在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);

最新更新