我该如何使用括号中的单个变量来访问深层值呢
how would I go about accessing a deep value using a single variable in bracket notation?
我想知道如何执行以下操作-我有以下数据:
dta = {
"fielddata": {
"text1": "4B030C2E-3D53-4DF8-A3535EF377B45DE5",
"text2": "Unlabeled"
}
}
我可以使用括号符号访问,比如
var result = dta["fielddata"]["text1"];
没问题,我可以使用这样的变量
var val1 = "fielddata",
val2 = "text1",
acc = dta[val1][val2];
log(acc);
再说一遍,太棒了——但当我只有一个变量包含点符号时呢?
比如,如果我只有怎么办
var val = "fielddata.text1",
acc = dta[val];
log(acc);
这将产生一个未定义的。有什么想法吗?
非常感谢!Marco
var val = "fielddata.text1",
acc = dta, // reference the base object
parts = val.split('.'), // split the val into an Array of individual parts
i;
// Iterate the parts, updating acc each time
for( i = 0; i < parts.length; i++ )
acc = acc[parts[i]];
另一个选项是JSONPath。对于相对简单的用例,手动执行可能是更好的解决方案,但如果更复杂,我可能会使用更正式的方法。
虽然我不想建议这样做,但总有eval('dta.fielddata.text1')
getter
exports.getDeep = function(field, object){
var parts = field.split('.');
var value = object;
// Iterate the parts, updating value each time
for( var i = 0; i < parts.length; i++ ){
value = value[parts[i]];
if(i==parts.length-1){
return JSON.parse(JSON.stringify(value))
}
}
}
设置
exports.setDeep = function(field, object, newvalue){
var parts = field.split('.');
for( var i = 0; i < parts.length; i++ ){
if(i==parts.length-1){
object[parts[i]] = newvalue
return object
}
}
}
相关文章:
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- 查询后websql成功回调无法访问变量
- 无法访问变量
- 从ajax调用成功内部访问变量
- 从子弹出子窗口访问变量
- 下划线模板无法访问变量
- Meteor Iron路由器通过[data]vs[params]访问变量
- CanvasJS-访问变量-访问属性toString的权限被拒绝
- 如何从嵌套函数中访问变量
- 在<%%中定义的访问变量>从<脚本></脚本>
- 自提交表单访问变量javascript
- 如何访问变量
- 稍后在链中访问变量
- 在 Javascript 中访问变量
- 在方法调用对象之外访问变量而不使它们全局化(可能吗?
- 如何从函数/实例外部访问变量
- 从另一个脚本源访问变量
- Meteor:跨所有 Meteor.method的访问变量
- 每次加载页面时,火狐附加组件访问变量
- 在另一个函数中访问变量,返回未定义的 - JavaScript