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

时间:2018-06-26 15:00:46

标签: javascript

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

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

我有一个键,值:user.name。 我试图获得这样的价值:obj[key],意思是obj['user.name']。它不起作用,仅适用于obj.title

我的对象具有很多也是对象的值,我想要这样的值:

myobject[mykey]

是否可以从上面的属性对象获取价值?

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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 :(得分:2)

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

obj['user']['name']

obj.user.name

答案 3 :(得分:2)

您也可以使用 obj.user.name

答案 4 :(得分:2)

您可以使用

进行访问
console.log(obj.user.name);

答案 5 :(得分:1)

您可以通过两种方式进行操作:

obj['user']['name']

obj.user.name