首页 > 解决方案 > 如何在对象中按键查找对象?

问题描述

const obj={a:{b:{n:{d:1},m:{f:1}}}}

如何{a:{b:{n:{d:1}}}}}通过键'n'查找和返回。

JSON解析字符串化

标签: javascript

解决方案


这是一个相当简洁的递归解决方案。它避免对值不是对象的属性进行递归(数组是对象,因此需要额外的.isArray()检查,并且null是一种特殊情况)*,并在找到包含传递的键的对象时终止Object.keys(),否则返回一个空对象。

const getNestedKeyPath = (obj, key) => {

  if (Object.keys(obj).includes(key)) {
    return { [key]: obj[key] };
  }

  for (const _key of Object.keys(obj)) {
    if (obj[_key] !== null && typeof obj[_key] === 'object' && !Array.isArray(obj[_key])) {
      const nextChild = getNestedKeyPath(obj[_key], key);
      if (Object.keys(nextChild).length !== 0) {
        return { [_key]: nextChild };
      }
    }
  };

  return {};
}

console.log(getNestedKeyPath(obj, 'n'))
<script>
const obj = {
  c: {
    x: new Date(),
    y: undefined,
    d: {
      l: { w: [2, 3] },
      k: { l: null }
    }
  },
  a: {
    b: {
      n: { d: 1 },
      m: { f: 1 }
    }
  },
};
</script>

*这不是最终检查,但符合我们的需求。请参阅:JavaScript 数据类型和数据结构以及检查值是否是 JavaScript 中的对象


推荐阅读