Javascript嵌套对象查找,从字符串,不带eval?
有一种情况,从外部源向我提供了一条路径,我需要从对象中提取该键并返回值 文档模式在设计时也是未知的,因此这必须是完全灵活的 eval()做我想做的,但我正在尽职调查,看看是否还有其他方法Javascript嵌套对象查找,从字符串,不带eval?,javascript,jquery,Javascript,Jquery,有一种情况,从外部源向我提供了一条路径,我需要从对象中提取该键并返回值 文档模式在设计时也是未知的,因此这必须是完全灵活的 eval()做我想做的,但我正在尽职调查,看看是否还有其他方法 var obj = {"a": {"b": {"c": 42}, "d": [8,9]}} var path = 'a.b.c'; eval('obj.' + path); 42 有没有人知道一种不用“eval”的方法,我可以使用字符串“a.b.c”在obj中查找嵌套值 这还必须支持列表中的索引: var p
var obj = {"a": {"b": {"c": 42}, "d": [8,9]}}
var path = 'a.b.c';
eval('obj.' + path);
42
有没有人知道一种不用“eval”的方法,我可以使用字符串“a.b.c”在obj中查找嵌套值
这还必须支持列表中的索引:
var path = 'a.d[1]';
eval('obj.' + path);
9
我可以使用jQuery,如果它提供了一个可行的解决方案,我只是看不到任何明显的东西
谢谢 这里的解决方案是递归
function getVal(path, obj){
if(path.length === 1){
return obj[path[0]];
}
else{
return getVal(path, obj[path.shift()]);
}
}
var obj = {"a": {"b": {"c": 42}, "d": [8,9]}};
var path = 'a.b.c';
var val = getVal(path.split('.'), obj);
console.log(val);
这将为您提供42
。它还不能与'a.d[1]
一起使用,但可以添加到中
更新:这里有一个适用于'a.d[1]
的更新版本:
function getVal(path, obj){
// Get the next "key" in the stack
var key = path.shift();
// Check for bracket notation
if(key.indexOf('[') > -1){
var match = key.match(/(\w+)\[(\d+)\]/);
if(match !== null){
// Get the "next" key
key = match[2];
obj = obj[match[1]];
}
}
// Return the value if done, otherwise, keep going
return path.length === 0 ? obj[key] : getVal(path, obj[key]);
}
var obj = {"a": {"b": {"c": 42}, "d": [8,9]}};
var path = 'a.d[1]';
var val = getVal(path.split('.'), obj);
console.log(val);
嗯,是的,很简单。解析路径,然后使用括号表示法访问属性。@JonathanLonowski:我喜欢
对象。通过问题中的字符串函数:-)谢谢大家!我不知道我怎么会错过另一个类似的问题,但其中一个答案,再加上下面@RocketHazmat的答案,让我得到了我所需要的。