我在这种结构中有对象:
obj = {
user: { name: 'jeterson' },
title: 'I am a test'
}
我有一个具有价值的钥匙:user.name
。我试图获得这样的价值:obj[key]
,意思是obj['user.name']
。它不起作用,仅适用于obj.title
。
我的对象有很多也是对象的值,我想要这样的值:
myobject[mykey]
是否可以从上面的属性对象获取价值?
您有多种解决方案可使用其键访问对象的元素:
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] 删除。
我来说两句