javascript - 检查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)
我知道这可能看起来像一个愚蠢的问题,但这是我一直想知道的,所以提前感谢任何答案!
解决方案
这是一个简单的解决方案,使用实用程序函数来使用 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
现在以这种方式检查值的值,如果其中设置了某些内容,它将告诉目标属性是否存在。如果它返回未定义,那么您尝试访问的值根本不存在。