【发布时间】:2014-11-19 23:15:19
【问题描述】:
路径变量是不可预测的。有时只是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? -
将当前结构转换为具有许多属性(也称为扁平化)的单个对象可能更简单,这可以动态完成。参考stackoverflow.com/questions/19436457/…如果您需要a/b/c 转换为abc,您可以修改答案以包含每个级别的父属性名称。
-
路径来自 URL
-
查看这篇关于按键查找嵌套对象的帖子:stackoverflow.com/questions/2631001/…。解决问题的方法很多。
-
看起来 lodash 有一个 getPath 函数可以完成这项工作。如果 underscore.js 有类似的功能会很棒吗?我真的不想在我的项目中包含另一个库);
标签: javascript jquery json eval