测试嵌套 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中文网其他相关文章!