递归地跟踪带有最终值的嵌套对象键

2024-04-07

给定一个如下所示的对象(可以具有未知数量的嵌套属性)

const theme = {
    fonts: {
        primary: 'Arial',
        secondary: 'Helvetica'
    },
    colors: {
        primary: 'green',
        secondary: 'red',
    },
    margin: {
        small: '0.5rem',
        medium: '1rem',
        large: '1.5rem'
    }
}

我正在努力实现以下目标:

  1. 递归循环直到我遇到一个不是对象的值
  2. 当我达到这个值时,我希望能够访问导致它的所有键以及最终值。

像下面这样:

['fonts', 'primary'], 'Arial'

['fonts', 'secondary'] 'Helvetica'

['colors', 'primary'] 'green'

etc.

我尝试过各种不同的尝试,但困扰我的是如何跟踪按键,并在再次调用原始循环时重置它们? ????


您可以采用递归方法检查对象并将嵌套子结果映射到最终结果。

const
    getPathes = object => Object
        .entries(object)
        .reduce((r, [k, v]) => {
            if (v && typeof v === 'object') {
                r.push(...getPathes(v).map(([p, v]) => [[k, ...p], v]));
            } else {
                r.push([[k], v]);
            }
            return r;
        }, []),
    theme = { fonts: { primary: 'Arial', secondary: 'Helvetica' }, colors: { primary: 'green', secondary: 'red' }, margin: { small: '0.5rem', medium: '1rem', large: '1.5rem' } };
    
console.log(getPathes(theme));
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归地跟踪带有最终值的嵌套对象键 的相关文章

  • 无法在 JavaScript for 循环中读取 null 的属性“长度”

    我正在尝试制作一个像 Stack Overflow 那样的 Markdown 编辑器 如果我实际上没有在文本区域中键入星号和包含短语的 http 我会收到标题中列出的此错误 如果我只输入包含星号的短语 则错误指的是这一行 if linkif
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • Web 组件 - 服务/非 html 组件

    所以我来自 Angular 想看看如何创建vanilla Web components 现在 从 Angular 开始 我们倾向于将事物分开 组件 充当 HTML CSS 和一些 javascript 然后是 服务 主要负责收集数据和执行不
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 如何使用 Angular JS 单击时将 html 模板附加到 div/指令?

    我有这种情况
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • 使用日期字符串数组在引导日期选择器中设置禁用月份不起作用

    我有一个日期选择器 其配置如下 HTML div class input group date div
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • IE 中的每个 JavaScript 支持?

    我有这个代码
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐

  • 64 位 Microsoft SQL Server 数据工具

    我无法找到 64 位版本的 Microsoft SQL Server Data Tools 有谁知道哪里可以下载64位版本Microsoft SQL Server 数据工具 Visual Studio 2013 和 SQL Server 2
  • 在 Swift 中检查 iOS 设备是否有 LiDAR

    Swift 有没有办法检查设备是否有 LiDAR 传感器 不幸的是 我在苹果官方纪录片和互联网搜索中都没有找到任何信息 我当前的解决方法是确定设备类型 如本文中所述 如何确定当前的iPhone 设备型号 https stackoverflo
  • Sencha Touch 2 - 无法从控制器获取参考视图

    我正在尝试通过参考查看 在控制器中定义的方法内 我收到错误消息 对象 object Object 没有方法 getUserForm 这是我的视图和控制器 如果有人可以帮助我 我会很高兴 提前致谢 用户表格 Ext define appNam
  • .htaccess url重写

    我想重写一个URL 假设您访问http files domain com uploads file name jpg http files domain com uploads file name jpg 我如何使用 htaccess 来编
  • Python - 导入函数和本地声明函数之间的性能差异?

    在 Python 中导入函数与在当前文件中声明函数在性能上是否存在显着差异 我有一个小函数 单行 我经常在几个函数中使用它 py我的程序中的文件 我希望只定义一次 以便我对它所做的更改反映在各处 但是 我不确定将它用作导入函数是否会在调用它
  • 使 (Mac)Vim 重新打开并在关闭时打开文件

    使用案例 MacVim 窗口中显示 2 3 个文件 您按 ctrl Q MacVim 就会关闭 当您重新启动 MacVim 时 它会打开并显示与您关闭它时相同的文件 你怎么能这么做呢 ANSWER 我将以下内容添加到我的 vmirc sav
  • 组合 Spark UDF(而不是将 UDF 作为一个)时是否会造成性能损失?

    我想知道编写 Spark udf 是否会降低性能 一般来说 我更喜欢编写只做一件事的小函数 这是一个简单的例子 给定一个DataFrame df def inc udf i Double gt i 1 def double udf i Do
  • Gson:java.text.ParseException:无法解析的日期:“2018-04-09T09:00:00 + 02:00”

    如何解析以下格式的字符串日期 2018 04 09T09 00 00 02 00 Gson使用 new SimpleDateFormat yyyy MM dd T HH mm ss Z Locale US 但它给出了以下例外 com goo
  • Python:为什么要腌制?

    我一直在使用pickle并且很高兴 然后我看到了这篇文章 不要腌制你的数据 http www benfrederickson com 2014 02 12 dont pickle your data html 进一步阅读似乎是 泡菜很慢 h
  • 如何中止存储桶的所有不完整分段上传

    有时 分段上传会因某种原因挂起或无法完成 在这种情况下 您将陷入难以删除的孤立部分 您可以通过以下方式列出它们 aws s3api list multipart uploads bucket BUCKETNAME 我正在寻找方法来中止它们
  • 如何更改过滤器中 http 响应的正文

    我正在尝试使用过滤器来检查响应正文中的 HTML 标记 问题是 如果我改变过滤器中的主体 当它到达客户端时它不会改变 我尝试了此处显示的解决方案 寻找使用 servlet 过滤器将内容插入响应的示例 https stackoverflow
  • Laravel 5:如何将播种器类添加到自动加载?

    我遵循文档 http laravel com docs master migrations database seeding http laravel com docs master migrations database seeding
  • 按 eloquent 中的最佳匹配排序

    我从雄辩的查询中得到了一些结果 我想按最佳匹配对它们进行排序 我怎样才能在 laravel eloquent 中做到这一点 在这里我找到了一些 SQL 解决方案 但我无法在 eloquent 构建器中使用它 SELECT TOP 5 FRO
  • 使用 ogr2ogr 将 svg 转换为 geojson 失败

    我从以下位置下载了芬兰的 svg 地图http www amcharts com svg maps map finland http www amcharts com svg maps map finland 我想将其转换为 topojso
  • 无法在 VSCode 中使用 pygame

    我目前正在做一项任务 我必须完成一些功能并导入 pygame 以便我可以运行一个跑步程序 当我尝试通过运行命令导入 pygame 时pip3 install r requirements txt 有一个需求文本文件 里面只写着 pygame
  • Azure Service Fabric 节点、节点类型、实例和规模集

    在尝试了几天Azure的Service Fabric之后 我仍然对以下四个关键词感到不舒服 实例 节点 节点类型 规模设定 他们的意思是什么 有什么区别 Instance 取决于上下文 它可能意味着虚拟机 服务实例等 Node 集群内的节点
  • Moment.js 如何使用 fromNow() 在几小时内返回所有内容?

    我已经搜索过moment js 文档 http momentjs com docs and 堆栈溢出 https stackoverflow com 的一种使用方法fromNow 功能但在几小时内返回所有内容 我的意思是 moment 20
  • android mms通过mms url下载mms内容

    我正在尝试下载MMS通过 MMS url 获取图片内容 但返回 403 禁止 服务器响应 其中包含无效内容MSISDN数字 我已将我的代码粘贴在下面以供参考 提前致谢 private static boolean downloadThrou
  • 不带 React 的 TypeScript JSX

    我想在 TypeScript 中使用 JSX 语法 但不想使用 React 我在这里看到了其他相关问题的答案 但没有任何内容足够完整或详细 无法提供任何帮助 我读了本指南 https basarat gitbooks io typescri
  • 递归地跟踪带有最终值的嵌套对象键

    给定一个如下所示的对象 可以具有未知数量的嵌套属性 const theme fonts primary Arial secondary Helvetica colors primary green secondary red margin