相关疑难解决方法(0)

使用嵌套Javascript对象的变量

假设我有这个:

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)

如果没有,有什么更好的方式来获得我想要的东西?

javascript

13
推荐指数
2
解决办法
1万
查看次数

在javascript中,测试属性是否深深嵌套在对象图中?

我从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"属性的报告时出现错误,从而尝试找到"未定义"的"生产力"属性.我宁愿发生的是条件只是跳过它并继续.

我看到了两种方法,这两种方式对我来说都很难看

  1. 使用嵌套条件分别测试每个属性
  2. 将该行括在try/catch块中以捕获错误并忽略它

我更喜欢的是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)

有什么想法吗?

javascript properties graph object

4
推荐指数
1
解决办法
3008
查看次数

通过键路径从嵌套的JSON字典中获取值,而无需使用eval

我想通过动态构造的键路径访问嵌套的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。

javascript json eval

3
推荐指数
1
解决办法
2541
查看次数

标签 统计

javascript ×3

eval ×1

graph ×1

json ×1

object ×1

properties ×1