如何使用变量作为key动态检查JavaScript嵌套对象的属性值?
解决方案
方案1:使用原生可选链搭配动态key语法
你之前的写法报错是因为仅在最后一层添加了可选链,前面的动态key访问环节如果某一层属性不存在,会直接抛出类型错误。正确的写法是每一层动态key访问前都添加?.做短路处理:
// 只要中间任意一层不存在或version为空,都会返回undefined,取反后为true if (!configuration?.[project]?.[app]?.version) { // 你的校验逻辑 }
如果你的业务场景要求严格匹配「project存在、app存在,但version缺失」的情况,可调整为:
if (configuration?.[project]?.[app] && !configuration[project][app].version) { // 你的校验逻辑 }
方案2:封装通用嵌套属性取值工具
如果经常需要处理多层动态key的嵌套取值,可封装一个通用工具函数复用:
/** * 读取嵌套对象的属性值,属性不存在时返回undefined * @param {object} obj 目标对象 * @param {array} keys 嵌套属性路径数组 */ function getNested(obj, keys) { return keys.reduce((current, key) => current?.[key], obj) }
使用时直接传入属性路径即可:
if (!getNested(configuration, [project, app, 'version'])) { // 你的校验逻辑 }
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

