首页 > 解决方案 > 检查javascript对象深处的关键多层

问题描述

假设我有可能包含对象 B 的对象 A,它可能包含可能包含对象 D 的对象 C。如果我想检查 D 是否存在(所以它看起来像这样):

A: {
    B: {
        C: {
             D: 1.5
        }
    }
}
// As oppose to
A: {
}

我知道在 ABC 中做“D”是行不通的,因为 AB 可能不存在,更不用说 ABC,所以有没有办法检查 D 是否存在比这更清洁/更好的做法:

('B' in A) && ('C' in A.B) && ('D' in A.B.C)

我知道这可能看起来像一个愚蠢的问题,但这是我一直想知道的,所以提前感谢任何答案!

标签: javascriptjson

解决方案


这是一个简单的解决方案,使用实用程序函数来使用 try catch 块处理错误。

// create a failsafe callback envoker
function failSafe(call) {
  try {
    return call();
  } catch (e) {
    return undefined;
  }
}
// given objects
const obj1 = { A: { B: { C: { D: 1.5 } } } };
const obj2 = { A: {} };
// getting values
const val1 = failSafe(() => obj1.A.B.C.D); // 1.5
const val2 = failSafe(() => obj1.A.B.C); // { D: 1.5 }
const val2 = failSafe(() => obj2.A.B.C.D); // undefined

现在以这种方式检查值的值,如果其中设置了某些内容,它将告诉目标属性是否存在。如果它返回未定义,那么您尝试访问的值根本不存在。


推荐阅读