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

3

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

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

我有一个键值对: user.name

我尝试像这样获取值:obj[key],意思是obj['user.name']。但它不起作用,只有obj.title可以正常工作。

我的对象有很多值也是对象,我想以这种方式获取值:

myobject[mykey]

可以像上面那样从属性对象中获取值吗?

你甚至不需要括号和引号,只需使用点表示法 obj.user.name - Yury Tarabanko
6个回答

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

是的,但是你怎么能从“user.name”转换为["user"]["name"]呢? - Luca Kiebel
我为那个问题添加了一些简单的逻辑。请看上面。 - mbuechmann

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'));

希望这有所帮助。

你忘记了 obj['user'].name :D - SirPilan
谢谢@Pilan,我正在添加它。:p - Takit Isy

2

先获取用户,再获取名称:

obj['user']['name']

或者
obj.user.name

2
您可以使用以下方式访问它:
console.log(obj.user.name);

2

你还可以使用obj.user.name


1
你可以用两种方式完成它:
obj['user']['name']

or

obj.user.name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接