gpt4 book ai didi

javascript - 在javascript中,测试深度嵌套在对象图中的属性?

转载 作者:搜寻专家 更新时间:2023-11-01 05:02:45 26 4
gpt4 key购买 nike

我从 CouchDB 数据库中收集了一组不同的、复杂的 JSON 对象。每个都包含许多级别的嵌套属性——例如,

tps_report.personnel_info.productivity.units_sold = 8  

我想遍历这些对象并用它们做一些事情:例如,

// writes units sold from each TPS report:
for (i in tpsReports) {
if (tpsReports[i].personnel_info.productivity.units_sold < 10) {
fireEmployee();
}
}

问题是许多 TPS 报告没有设置所有这些属性。因此,如果我尝试这样做,我将在第一次循环到达没有“personnel_info”属性的报告时遇到错误,因此会尝试找到“未定义”的“生产率”属性。我宁愿发生的是条件只是跳过它并继续。

我看到了两种解决方法,这两种方法对我来说都很丑

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

我更喜欢 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();
}
}
}

有什么想法吗?

最佳答案

function isset(obj, propStr) {
var parts = propStr.split(".");
var cur = obj;
for (var i=0; i<parts.length; i++) {
if (!cur[parts[i]])
return false;
cur = cur[parts[i]];
}
return true;
}

请注意,第二个参数是一个字符串,因此在访问不存在的属性时不会抛出异常。

关于javascript - 在javascript中,测试深度嵌套在对象图中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4343028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com