路径变量是不可预测的。有时只是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
最佳答案
你能直接在循环中访问你的 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;
}
关于javascript - 如何在不使用 eval 的情况下动态访问 JSON 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028868/