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

杰特森·米兰达·戈麦斯

我在这种结构中有对象:

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

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

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

myobject[mykey]

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

塔吉特·伊西(Takit Isy)

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

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

旧答案:使用afor遍历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'));

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章