代码之家  ›  专栏  ›  技术社区  ›  Jeterson Miranda Gomes

如何从父对象中获取对象的属性值

  •  3
  • Jeterson Miranda Gomes  · 技术社区  · 6 年前

    我在这个结构中有一个对象:

    obj = {
        user: { name: 'jeterson' },
        title: 'I am a test'
    }
    

    我有一把有价值的钥匙: user.name 是的。 我一直在努力实现这样的价值: obj[key] ,含义 obj['user.name'] 是的。它不起作用,只起作用 obj.title 是的。

    我的对象有许多也是对象的值,我希望获得如下值:

    myobject[mykey]
    

    有可能从上面这样的属性对象中获取值吗?

    6 回复  |  直到 6 年前
        1
  •  3
  •   Takit Isy Surendra    6 年前

    有多种解决方案可以访问对象的元素及其键:

    var obj = {
      user: { name: 'jeterson' },
      title: 'I am a test'
    }
    
    console.log(obj['user']['name']);
    console.log(obj['user'].name);
    console.log(obj.user['name']);
    console.log(obj.user.name);

    但是你不能用一个变量 key = 'user.name' 是的。

    如果需要使用包含嵌套键的变量,可以创建函数。

    更新答案: 实现这一目标的捷径是使用 .reduce() 以下内容:

    // My function
    function obj_tree_key(obj, path) {
     return path.split('.').reduce((accu, val) => accu[val] || 'Not found', obj);
    }
    
    var obj1 = {
      user: {
        name: 'jeterson'
      },
      title: 'I am a test'
    }
    console.log(obj_tree_key(obj1, 'user.name')); // Outputs "jeterson"
    
    // Here is an example with error:
    var obj2 = { 
      user: {
        nameeeee: 'jeterson'
      },
      title: 'I am a test'
    }
    console.log(obj_tree_key(obj2, 'user.name'));

    旧答案 :使用 for 循环通过 keys 减少项目:

    // My function
    function obj_tree_key(obj, tree_key) {
      var result = obj;
      var keys = tree_key.split('.');
      for (var i = 0; i < keys.length; i++) {
        result = result[keys[i]] || 'Not found'; // Error handling
      }
      return result;
    }
    
    var obj1 = {
      user: {
        name: 'jeterson'
      },
      title: 'I am a test'
    }
    console.log(obj_tree_key(obj1, 'user.name')); // Outputs "jeterson"
    
    // Here is an example with error:
    var obj2 = { 
      user: {
        nameeeee: 'jeterson'
      },
      title: 'I am a test'
    }
    console.log(obj_tree_key(obj2, 'user.name'));

    希望有帮助。

        2
  •  4
  •   mbuechmann    6 年前

    您可以通过以下方式访问它:

    obj['user']['name']
    

    或者:

    obj.user.name
    

    如果你想从一个像“user.name”这样的键得到这个值,你必须自己做一些逻辑。你可以像这样一起砍掉一些东西:

    let obj = {
      user: {
        name: 'jeterson'
      },
      title: 'I am a test'
    }
    
    let key = 'user.name';
    let keys = key.split('.');
    
    let res = obj;
    while (keys.length > 0 && res) {
      let k = keys.shift();
      res = res[k];
    }
    console.log(res) // "jeterson"

    当键不匹配时,res保持 undefined 是的。

        3
  •  2
  •   Nebulosar Nutcracker    6 年前

    首先获取用户,然后获取名称:

    obj['user']['name']
    

    obj.user.name
    
        4
  •  2
  •   Sreeragh A R    6 年前

    你也可以使用 obj.user.name

        5
  •  2
  •   Mamtha Soni K    6 年前

    你可以使用

    console.log(obj.user.name);
    
        6
  •  1
  •   Alessandro.Vegna    6 年前

    你可以用两种方法:

    obj['user']['name']
    

    obj.user.name