Javascript:如何使用字符串数组获取对象属性?

Has*_*yat 4 javascript arrays string object

如何使用字符串数组(属性名称)获取对象属性?(数组中的最后一个元素是object的内部属性)

请参阅以下代码:

方便的方式:

let myObject = {
    "property": {
        "subproperty": {
            "targetproperty": "Hi, We done it!"
        }
    }
};
let myString = "property:subproperty:targetproperty";
let parts = myString.split( ":" );
console.log( myObject[ parts[ 0 ] ][ parts[ 1 ] ][ parts[ 2 ] ] ); // Output: "Hi, We done it!"
Run Code Online (Sandbox Code Playgroud)

评估方式:

let myObject = {
    "property": {
        "subproperty": {
            "targetproperty": "Hi, We done it!"
        }
    }
};
let myString = "property:subproperty:targetproperty";
let parts = myString.split( ":" );
let code = "myObject";
for ( let i = 0; i < parts.length; i++ ) {
    code += "['" + parts[ i ] + "']";
}
code += ";";
console.log( code );
console.log( eval( code ) ); // Output: "Hi, We done it!"
Run Code Online (Sandbox Code Playgroud)

伊娃是邪恶的.所以我需要一个更清洁的方法来做到这一点.

如果没有评估和方便的工作,我该怎么做?

JLR*_*she 9

你可以使用.reduce():

let myObject = {
  "property": {
    "subproperty": {
      "targetproperty": "Hi, We done it!"
    }
  }
};
let myString = "property:subproperty:targetproperty";
let value = myString.split(":").reduce(function(obj, prop) {
  return obj && obj[prop];
}, myObject);

console.log(value);
Run Code Online (Sandbox Code Playgroud)