微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查深层对象属性

如何解决如何检查深层对象属性

我在寻找对象深处的属性时遇到了某些困难。以下是一些场景:

{ 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 举报,一经查实,本站将立刻删除。