Javascript:如何使用字符串数组获取Object属性? [英] Javascript: How to Get Object property using Array of string?

查看:86
本文介绍了Javascript:如何使用字符串数组获取Object属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How do i get object property using array of string (name of properties)? (the last element in array is the inner property of 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!"

评估方式:

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!"

Eval是邪恶的.所以我需要一种更清洁的方法.

Eval is evil. so i need a cleaner way to do it.

在没有评估和方便的情况下该如何做?

How do i do it without eval and handy job?

推荐答案

您可以使用.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);

这篇关于Javascript:如何使用字符串数组获取Object属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆