我有一个在这个结构中的对象:
obj = {
user: { name: 'jeterson' },
title: 'I am a test'
}
我有一个键值对: user.name
。
我尝试像这样获取值:obj[key]
,意思是obj['user.name']
。但它不起作用,只有obj.title
可以正常工作。
我的对象有很多值也是对象,我想以这种方式获取值:
myobject[mykey]
可以像上面那样从属性对象中获取值吗?
我有一个在这个结构中的对象:
obj = {
user: { name: 'jeterson' },
title: 'I am a test'
}
我有一个键值对: user.name
。
我尝试像这样获取值:obj[key]
,意思是obj['user.name']
。但它不起作用,只有obj.title
可以正常工作。
我的对象有很多值也是对象,我想以这种方式获取值:
myobject[mykey]
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"
undefined
。您可以通过多种方式使用键访问对象中的元素:
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先获取用户,再获取名称:
obj['user']['name']
obj.user.name
console.log(obj.user.name);
你还可以使用obj.user.name
obj['user']['name']
or
obj.user.name
obj.user.name
。 - Yury Tarabanko