如何在不使用 eval 的情况下动态访问 JSON 节点
How can i reach a JSON node dynamically without using eval?
路径变量是不可预测的。有时只是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函数,用于下划线.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;
}
function GetByPath(cont, path)
{
var result = cont;
$.each(path.split("/"), function(index, value) {
if(typeof result !== 'undefined' && result !== null) {
result = cont[value];
}
}
return result;
}
相关文章:
- 如何在没有ajax的情况下将javascript动态数据发送到php变量
- 如何在不重新加载整个网页的情况下动态更改经度和纬度的值
- 如何动态设置填充并在不刷新的情况下显示它
- 在不增加分析跳出率的情况下,绑定网页上的内部链接以动态加载
- 在没有新行的情况下调整td中的动态加载内容
- 如何动态更改所选选项并在不重新加载的情况下进行更新
- 在表单未传递的情况下使用.html()动态插入隐藏文本字段
- 我可以在不丢失旧评论的情况下设置disqus_identifier吗?动态
- Highcharts - 如何在不重新创建图表的情况下动态禁用 plotBorder
- 如何在嵌套级别不受限制的情况下显示对象的动态嵌套子数组对象
- 是否可以在没有javascript的情况下以html形式动态进行计算
- 如何在不使用 CSS 的情况下在动态添加的 javascript DOM 元素中保留空格
- 如何在不刷新的情况下删除动态创建的表行(最好使用标准的向左滑动动画)
- Yii2 中有什么方法可以在不重新加载的情况下动态更改 URL?来自 PJAX 的一部分
- 如何在不使用 eval 的情况下动态访问 JSON 节点
- 如何在不点击页面加载的情况下动态创建文本框
- 你能在没有指令的情况下在ngModel上动态呈现HTML吗
- 如何在没有内联javascript hanlder的情况下将参数从动态表传递到事件处理程序
- 在不重新加载页面的情况下加载新的动态图表
- 在动态情况下为相应的图像分配按钮