首页 > web前端 > js教程 > 如何可靠地检查 JavaScript 对象中是否存在嵌套键?

如何可靠地检查 JavaScript 对象中是否存在嵌套键?

Linda Hamilton
发布: 2024-12-20 17:43:09
原创
312 人浏览过

How Can I Robustly Check for Nested Key Existence in JavaScript Objects?

测试嵌套 JavaScript 对象键是否存在

处理具有嵌套属性的复杂 JavaScript 对象时,确定嵌套键是否存在可能具有挑战性。下面深入探讨了测试嵌套对象键是否存在的最佳实践。

传统方法,如问题中所示,是按顺序检查嵌套对象的每个级别:

if (test.level1 && test.level1.level2 && test.level1.level2.level3) {
    alert(test.level1.level2.level3);
}
登录后复制

但是,当遇到不存在的属性时,这种方法很容易出现异常。

解决方案:迭代存在检查器

为了提高鲁棒性,更合适的解决方案是创建一个函数,迭代地检查嵌套属性是否存在而不触发异常:

function checkNested(obj, ...args) {
  for (var i = 0; i < args.length; i++) {
    if (!obj || !obj.hasOwnProperty(args[i])) {
      return false;
    }
    obj = obj[args[i]];
  }
  return true;
}
登录后复制

此函数接受任意数字属性名称作为参数,如果所有属性名称都存在于嵌套对象中,则返回 true。例如:

var test = {level1:{level2:{level3:'level3'}} };

checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false
登录后复制

ES6 解决方案

ES6 提供了更简洁、更优雅的存在检查选项:

1.尾递归函数:

function checkNested(obj, level,  ...rest) {
  if (obj === undefined) return false
  if (rest.length == 0 &amp;&amp; obj.hasOwnProperty(level)) return true
  return checkNested(obj[level], ...rest)
}
登录后复制

2.基于Reduce的函数:

要检索嵌套属性的值,您可以使用此单行函数:

function getNested(obj, ...args) {
  return args.reduce((obj, level) => obj &amp;&amp; obj[level], obj)
}
登录后复制

例如:

console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
登录后复制

以上是如何可靠地检查 JavaScript 对象中是否存在嵌套键?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板