路径变量是不可预测的。有时它只是a
,有时是a/b
,有时是a/b/c
等。我想根据路径动态到达节点。下面的代码表现我想要的,但我可以考虑,如果没有eval
,有更好的方法可以做到这一点。
http://jsfiddle.net/nuonzngv/1/
cont = {
"a" : {
"b": {
"c": "d"
}
}
}
path = "a/b/c";
sect = path.split("/");
path = "cont";
$.each(sect, function( index, value ) {
path = path + "['" + value + "']";
});
console.log(eval(path));
我找到了一个插件,里面有一个getPath函数,用于underscore.js: https://github.com/documentcloud/underscore-contrib/blob/master/docs/underscore.object.selectors.js.md
答案 0 :(得分:2)
您可以直接在循环中访问cont
对象吗?如果是这样的话:
var cont = {
"a" : {
"b": {
"c": "d"
}
}
},
o = cont,
path = "a/b/c",
sect = path.split("/");
path = "cont";
$.each(sect, function(index, value) {
path = path + "['" + value + "']";
if (o) o = o[value];
});
console.log(path+'='+o);
给出:
cont['a']['b']['c']=d
无效路径将返回undefined
。
* 修改: psibernetic 的评论建议创建一个独立的功能:
function GetByPath(obj, path) {
var result = obj;
$.each(path.split("/"), function(index, value) {
if (typeof result !== 'undefined' && result !== null) {
result = obj[value];
}
}
return result;
}
答案 1 :(得分:1)
function GetByPath(cont, path)
{
var result = cont;
$.each(path.split("/"), function(index, value) {
if(typeof result !== 'undefined' && result !== null) {
result = cont[value];
}
}
return result;
}