javascript - 如何在对象中按键查找对象?
问题描述
const obj={a:{b:{n:{d:1},m:{f:1}}}}
如何{a:{b:{n:{d:1}}}}}
通过键'n'查找和返回。
JSON解析字符串化
解决方案
这是一个相当简洁的递归解决方案。它避免对值不是对象的属性进行递归(数组是对象,因此需要额外的.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 中的对象
推荐阅读
- c# - c#将数组类型转换为另一种数组类型,无需复制和迭代
- azure - Azure SAML 用户属性和声明
- javascript - JS 有时无法在 Chrome 和其他浏览器中加载
- peerjs - 如何使用 Peer.on('call') 功能?
- javascript - 为什么在 React 中尝试访问 Hook State 中的嵌套数组时出现错误?
- wordpress - WordPress sha1/MD5 密码
- sql - 如何重写整个子查询逻辑并用于存储过程并在存储过程的选择子句中调用标志列“匹配”案例语句
- python - 安装 pyGCO 时出错,显示 pybind11 警告
- python - for循环中有很多带有数据JSONS的变量
- azure - AADSTS50011 错误 - 请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配