如何解决如何检查深层对象属性
我在寻找对象深处的属性时遇到了某些困难。以下是一些场景:
{ redacted: true } vs { someProperty: true,anotherProperty: { redacted: true } }
我希望能够在任何对象级别找到 redacted
键。我试图在库 lodash
中找到一些解决方案,但没有任何成功。
用这个界面实现一些东西会很棒:
findDeepProperty(obj,'redacted')
另外,有没有办法通过使用像 lodash
这样的外部库来实现这个算法?
解决方法
首先,这是一个非常有趣的问题。我设法用纯 JavaScript 创建了一个有效的解决方案,因此您不必导入任何第三方库,例如 lodash
。它将尝试在对象中找到具有给定名称的 property
作为输入。它将使用 How to check the depth of an object? 中的算法在每个深度遍历对象。如果找到它,它将返回该属性的值。如果它找不到它,它将返回一个空对象。这是片段:
let object = {
'key1': {
'key2': 'value2'
},'key3': {
'key4': {
'key5': 'value5'
},},}
findDeepProperty = function(object,query_key) {
for (let key in object) {
if (key === query_key) {
return object[key];
}
if (!object.hasOwnProperty(key)) continue;
if (typeof object[key] == 'object') {
let sub_result = findDeepProperty(object[key],query_key);
if (Object.keys(sub_result).length) return sub_result;
}
}
return {};
}
console.log(findDeepProperty(object,'key3'))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。