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

如何高效检查嵌套 JavaScript 对象键是否存在?

Linda Hamilton
Linda Hamilton原创
2024-12-19 09:17:10169浏览

How to Efficiently Check for Nested JavaScript Object Key Existence?

嵌套 JavaScript 对象键存在测试

识别深层嵌套对象属性的存在可能是一个挑战。当尝试使用点表示法访问多级键时,如果任何中间级别未定义或为空,则可能会发生错误。

现有方法:

一种常见方法是使用条件语句手动检查嵌套对象的每个级别,确保在访问所需的键之前每个级别都存在。但是,对于深度嵌套的对象,此方法可能会变得乏味且容易出错。

更好的选择:

更强大的解决方案是创建一个函数来递归地检查嵌套键的存在。该函数将对象和一系列级别名称作为参数,并迭代每个级别,验证其是否存在以及其值是否未定义或为 null。

函数实现:

这是一个逐步的函数实现:

function checkNested(obj /*, level1, level2, ... levelN*/) {
  var args = Array.prototype.slice.call(arguments, 1);

  for (var i = 0; i < args.length; i++) {
    if (!obj || !obj.hasOwnProperty(args[i])) {
      return false;
    }
    obj = obj[args[i]];
  }
  return true;
}

如果所有指定的级别此函数返回 true

ES6 更新:

在 ES6 中,可以使用递归和尾调用优化来实现此函数的更简洁版本:

function checkNested(obj, level,  ...rest) {
  if (obj === undefined) return false
  if (rest.length == 0 && obj.hasOwnProperty(level)) return true
  return checkNested(obj[level], ...rest)
}

示例用法:

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

checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false

值检索 (ES6):

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

function getNested(obj, ...args) {
  return args.reduce((obj, level) => obj && obj[level], obj)
}

示例:

console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn