javascript - Javascript - 动态嵌套横向
问题描述
我的目标是这样的:
说如果我有参考
a: {
b: {
c:{
d: {
//Some properties here.
}
}
}
}
然后通过使用类似的字符串"a.b.c.d"
(事先不知道),我希望能够横向对象并获取d
(或 return null
/ throw Error
)的值。
我知道我们总是可以得到下面一个深度的值(例如a["b"]
等等),然后这绝对可以使用.split()
然后使用循环或递归来实现,但我希望有一个更简单的一步方法这样做。
解决方案
如果不使用循环,就没有其他方法可以做到这一点是递归。eval()
可以这样做,但不推荐。
const getProp = (obj,path) => path.split('.').reduce((ac,a) => (ac || {})[a],obj);
const obj = { a: {
b: {
c:{
d: {
someprop:"x"
}
}
}
}
}
console.log(getProp(obj,"a.b.c.d"))
另一种方法可能是使用Proxy()
,但我仍然会说reduce()
更好。
const obj = {
a: {
b: {
c:{
d: {
someprop:"x"
}
}
}
}
}
const handler = {
get:function(obj,prop){
if(prop.includes('.')) return prop.split('.').reduce((ac,a) => (ac || {})[a] ,obj)
else return obj[prop]
}
}
let res = new Proxy(obj,handler);
console.log(res['a.b.c.d'])
基于评论“a.b.c.d
事先不知道”。
const obj = {
a: {
b: {
c:{
d: {
someprop:"x"
}
}
}
}
}
const getProp = (obj,depth) => [...Array(depth)].reduce((ac,a) => (Object.values(ac)[0] || {}),obj)
console.log(getProp(obj,4))
推荐阅读
- node.js - express.js 猫鼬填充 2 模型
- reactjs - React 类型化上下文
- php - file_put_contents(): 读取 8192 字节失败,errno=21 是一个目录
- java - 为什么在此处使用 try catch 时出现错误“变量 num1 可能尚未初始化”?
- python - 如何在非路由脚本中使用 Flask-Mail 发送邮件
- c# - 使用 LINQ 对 c# 中的集合进行谓词过滤以及将结果与 List 进行比较的必要性
元素 - cypress - 如何查询通过
在测试 Web 组件时使用 Cypress - python - 如何在odoo中使用message_post_with_template函数发送邮件
- git - 没有冲突的 git 合并是否有可能破坏应用程序功能?
- javascript - Merge and sort multiple arrays using their ordering logic