javascript - 递归地跟踪具有最终值的嵌套对象键
问题描述
给定一个形状如下的对象,(可能有未知数量的嵌套属性)
const theme = {
fonts: {
primary: 'Arial',
secondary: 'Helvetica'
},
colors: {
primary: 'green',
secondary: 'red',
},
margin: {
small: '0.5rem',
medium: '1rem',
large: '1.5rem'
}
}
我试图实现以下目标:
- 递归循环,直到我遇到一个不是对象的值
- 当我达到这个值时,我希望能够访问导致它的所有键,以及最终值。
类似于以下内容:
['fonts', 'primary'], 'Arial'
['fonts', 'secondary'] 'Helvetica'
['colors', 'primary'] 'green'
等等
我尝试了各种不同的尝试,但让我感到困惑的是我如何跟踪键,并在再次调用原始循环时重置它们?
解决方案
谢谢大家的回复真的帮助我到达那里,我最终得到了这个:
const setCSSVars = (obj: { [key: string]: any }, stack: string[] = []) => {
Object.entries(obj).forEach(([key, value]) => {
if (typeof value === 'object' && value !== null) {
setCSSVars(value, [...stack, key])
} else {
document.documentElement.style.setProperty(
`--theme-${stack.join('-')}-${key}`,
value
)
}
})
}
推荐阅读
- php - PHP 不回显 JS 脚本
- shopify - 部分未显示 Youtube URL
- amazon-web-services - 如何通过某些文件类型限制 S3 文件上传到存储桶?
- python - 使用诗歌为 virtualenvs 设置自定义路径
- postgresql - Postgresql:文字表名
- python - 对具有函数形式元素的矩阵进行操作
- angular - 有没有办法在 Froala 自定义弹出窗口中使用 Angular (2+) 组件?
- python - 如何创建列表/字典并将值从多个 PDF 文件导出到 Excel
- boolean-logic - 有多少个布尔函数可以用于 n 维输入和 n 个训练示例
- node.js - mongoose delete 后总是返回 undefined