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

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

Patricia Arquette
Patricia Arquette原创
2024-12-20 06:29:13415浏览

How Can I Safely Check for the Existence of Nested Keys in JavaScript Objects?

测试嵌套 JavaScript 对象键的存在

验证嵌套 JavaScript 对象中的属性是否存在是一个挑战,尤其是在面临潜在的问题时null 或未定义的值。为了解决这个问题,请考虑采用分步方法,而不是依赖于有风险且容易出错的直接属性访问。

一个可行的解决方案涉及一个定制的函数,该函数可以测试多个嵌套级别的存在。这个函数被优雅地命名为 checkNested,接受目标对象作为其第一个参数,后跟一系列预期的嵌套属性名称。它系统地检查每个属性是否存在,如果找到所有属性,则返回 true,否则返回 false。

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;
}

例如,给定对象:

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

使用预期调用 checkNested level 返回预期结果:

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

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);
}

此外,如果您的目标是检索嵌套属性的值而不是仅仅测试其存在,则更直接的方法是可用:

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

const test = {
  level1: {
    level2: {
      level3: 'level3',
    },
  },
};
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
console.log(getNested(test, 'level1', 'level2', 'level3', 'length')); // 6
console.log(getNested(test, 'level1', 'level2', 'foo')); // undefined
console.log(getNested(test, 'a', 'b')); // undefined

通过利用这些技术,您可以自信地浏览嵌套 JavaScript 对象的复杂性,确保您的程序的稳健性和可靠性代码。

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

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