我在此结构中有一个对象:
obj = {
user: { name: 'jeterson' },
title: 'I am a test'
}
我有一个键,值:user.name
。
我试图获得这样的价值:obj[key]
,意思是obj['user.name']
。它不起作用,仅适用于obj.title
。
我的对象具有很多也是对象的值,我想要这样的值:
myobject[mykey]
是否可以从上面的属性对象获取价值?
答案 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