假设我有这个:
var a = { A : { AA : 1 }, B : 2 };
Run Code Online (Sandbox Code Playgroud)
有没有办法让我创建一个可以让我引用AA或B的变量?语法是什么样的?
// I know I can do this:
a['B']; // 2
a['A']['AA']; // 1
// something like this?
var myRef = ???;
a[myRef]; 1 or 2 depending on myRef
Run Code Online (Sandbox Code Playgroud)
如果没有,有什么更好的方式来获得我想要的东西?
我从CouchDB数据库中获得了一组完全不同的复杂JSON对象.每个都包含许多级别的嵌套属性 - 例如,
tps_report.personnel_info.productivity.units_sold = 8
Run Code Online (Sandbox Code Playgroud)
我想迭代这些对象并用它们做些事情:例如,
// writes units sold from each TPS report:
for (i in tpsReports) {
if (tpsReports[i].personnel_info.productivity.units_sold < 10) {
fireEmployee();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是许多TPS报告没有设置所有这些属性.因此,如果我尝试这个,我将在第一次循环到达没有"personnel_info"属性的报告时出现错误,从而尝试找到"未定义"的"生产力"属性.我宁愿发生的是条件只是跳过它并继续.
我看到了两种方法,这两种方式对我来说都很难看
我更喜欢的是PHP的isset()函数,它不会抛出错误,无论你提供什么 - 它只会告诉你你正在寻找的特定变量是否存在.所以,就像
// writes units sold from each TPS report:
for (i in tpsReports) {
if (isset(tpsReports[i].personnel_info.productivity.units_sold)){
if (tpsReports[i].personnel_info.productivity.units_sold < 10) {
fireEmployee();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我想通过动态构造的键路径访问嵌套的JSON字典。
密钥路径使用标准的JSON点和下标运算符。(.和[x])
例如:
var data =
{"title": "a_title",
"testList": [
{
"testListItemKey": "listitem1"
},
{
"testListItemKey": "listitem2",
"deepTestList": [
{
"testListItemKey": "listitem1",
"testListItemDict":{
"subTitle": "sub_title",
}
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
密钥路径字符串的示例为:
data.feedEntries[0].testList[2].deepTestList[1].testListItemDict.subTitle
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的最简单的工作解决方案是使用eval或函数构造函数:
function valueForKeypPath(data, keyPath) {
"use strict";
var evaluateKeypath = new Function('data', 'return data.' + keyPath);
return evaluateKeypath(data);
}
Run Code Online (Sandbox Code Playgroud)
由于我无法完全信任从远程端点接收到的JSON数据,因此我想避免使用evalet.al。