处理具有嵌套属性的复杂 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 && obj.hasOwnProperty(level)) return true return checkNested(obj[level], ...rest) }
2.基于Reduce的函数:
要检索嵌套属性的值,您可以使用此单行函数:
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
例如:
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
以上是如何可靠地检查 JavaScript 对象中是否存在嵌套键?的详细内容。更多信息请关注PHP中文网其他相关文章!