如何以编程方式获取对象的访问值

时间:2016-08-27 21:02:52

标签: typescript

假设函数foo包含2个参数:

  1. obj是一个对象

  2. arr是一个字符串数组

  3. arr的成员是obj中的属性名称,例如 如果obj[arr[0]][arr[1]]至少有2个成员,则arr会有一个值 如何获取obj arr指向的属性值?

    注意: obj已输入,旧学校迭代会抛出错误。

    示例:
    obj可能是

    {
      pro1: 'a',
      prop2: {
        prop21: 'b',
        prop22: ['c', 'd']
      }
    }
    

    arr可能是

    ['prop2', 'prop21']
    

    我没有关于objarr的任何信息,我只知道

    obj['prop2']['prop21']
    

    当然有一个值,这个短语不会抛出这个错误:

      

    无法读取未定义的属性prop21

1 个答案:

答案 0 :(得分:0)

如果我理解你的话:

let obj = {
    pro1: "a",
    prop2: {
        prop21: "b",
        prop22: ["c", "d"]
    }
};

function getValue(obj: any, keys: string[]): any {
    let index = 0,
        current: any = obj;

    while (current[keys[index]]) {
        current = current[keys[index++]];
    }

    return current;
}

console.log(getValue(obj, ["prop2", "prop21"])); // b
console.log(getValue(obj, ["prop2", "prop22"])); // ["c", "d"]

code in playground