如何在 JavaScript 中创建该对象的键/值的所有组合?

2023-11-23

我有以下 JavaScript 对象结构:

var options = {
    optionOne: [true, false],
    optionTwo: [true, false],
    optionThree: [
        null,
        {property1: 9, property2: 7},
        {property1: 4, property2: 12},
        {property1: 16, property2: 14}
    ]
};

请注意,该对象中的密钥/对的数量会有所不同。所以实际上可能有optionFour, optionFive等等,并且每个选项的数组可以有任意数量或类型的值。

我需要迭代该对象并创建一个包含所有可能选项组合的对象的数组:

[
    {optionOne: true,  optionTwo, true,  optionThree: null},
    {optionOne: false, optionTwo, true,  optionThree: null},
    {optionOne: true,  optionTwo, false, optionThree: null},
    {optionOne: false, optionTwo, false, optionThree: null},
    {optionOne: true,  optionTwo, true,  optionThree: {property1: 9, property2: 7}},
    {optionOne: false, optionTwo, true,  optionThree: {property1: 9, property2: 7}},
    {optionOne: true,  optionTwo, false, optionThree: {property1: 9, property2: 7}},
    {optionOne: false, optionTwo, false, optionThree: {property1: 9, property2: 7}},
    {optionOne: true,  optionTwo, true,  optionThree: {property1: 4, property2: 12}},
    {optionOne: false, optionTwo, true,  optionThree: {property1: 4, property2: 12}},
    {optionOne: true,  optionTwo, false, optionThree: {property1: 4, property2: 12}},
    {optionOne: false, optionTwo, false, optionThree: {property1: 4, property2: 12}},
    {optionOne: true,  optionTwo, true,  optionThree: {property1: 16, property2: 14}},
    {optionOne: false, optionTwo, true,  optionThree: {property1: 16, property2: 14}},
    {optionOne: true,  optionTwo, false, optionThree: {property1: 16, property2: 14}},
    {optionOne: false, optionTwo, false, optionThree: {property1: 16, property2: 14}}
]

我正在努力解决如何实现这一点,但我相当有信心答案在于递归。

算法大神能帮帮我吗?


function getCombinations(options, optionIndex, results, current) {
    var allKeys = Object.keys(options);
    var optionKey = allKeys[optionIndex];

    var vals = options[optionKey];

    for (var i = 0; i < vals.length; i++) {
        current[optionKey] = vals[i];

        if (optionIndex + 1 < allKeys.length) {
            getCombinations(options, optionIndex + 1, results, current);
        } else {
            // The easiest way to clone an object.
            var res = JSON.parse(JSON.stringify(current));
            results.push(res);
        }
    }

    return results;
}

像这样使用它:

var results = getCombinations(options, 0, [], {});

这是一个工作JSFiddle 示例.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JavaScript 中创建该对象的键/值的所有组合? 的相关文章

  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • 仅使用堆区域的递归

    是否有仅使用堆区域的递归示例 在 C 中 基于函数调用的递归总是使用堆栈 几乎按照定义 如果您愿意将递归转换为迭代 那么可以仅使用堆空间 但这并不是真正的递归 您可以通过在堆中实现堆栈来实现这一点 某些问题可以使用尾递归 http en w
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 消息“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调”

    我正在使用 Puppeteer 和 Jest 来运行一些前端测试 我的测试如下 describe Profile Tab Exists and Clickable settings user gt test Assert that you
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • 是否可以使用 javascript 测试用户的浏览器/操作系统是否支持给定类型的链接?

    是否可以使用 javascript 或其他任何东西 测试用户的操作系统 浏览器是否支持给定的 url 方案 例如 大多数仅使用网络邮件的用户计算机上未设置 mailto 是否有可能以某种方式捕获单击 mailto 链接的尝试并弹出比浏览器错
  • javascript中按tab键时如何调用函数?

    我有一个这样的功能 function whenEmpty field if field value field style backgroundColor ffcccc alert Please fill the field field f
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • IE11不监听MSFullscreenChange事件

    我正在尝试使用 Bigscreen js 在 IE11 中使用全屏 但 IE11 不监听 MS FullscreenChange 事件 document addEventListener MSFullscreenChange functio
  • 将 javascript 整数转换为字节数组并返回

    function intFromBytes x var val 0 for var i 0 i lt x length i val x i if i lt x length 1 val val lt lt 8 return val func
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 如何将函数内的捕获错误传递给父级

    我有这几行代码示例 想知道下面的逻辑到底如何 try var response child console log why here catch err console log should show this err function c
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas

随机推荐

  • 如何找到 NSTimer 剩余的时间间隔

    我已经设置了一个NSTimer scheduledTimerWithTimeInterval每20分钟间隔一次的方法 我希望能够找出应用程序进入后台模式时还剩多少时间 如何知道距离间隔还剩多少时间 Thanks 您可以访问 NSTimerf
  • Java 是否包含对编译代码的注释?

    嗯 标题是不言自明的 我在编译一个有很多注释行的项目时想知道这一点 这有点愚蠢 因为 jar 文件不会增加太多 一些字节 但我很好奇这是否会影响具有大量代码和注释的程序 Thanks 不 任何语言 不仅仅是 Java 中的注释通常都会被删除
  • C 中的宽字符输入/输出是否始终读取/写入正确的(系统默认)编码?

    我主要对类 Unix 系统 例如 便携式 POSIX 感兴趣 因为 Windows 似乎对宽字符做了奇怪的事情 执行读取和写入宽字符功能 例如getwchar and putwchar 总是 做正确的事 例如从 utf 8 读取并在设置的语
  • 何时使用 SELECT ... FOR UPDATE?

    请帮助我理解背后的用例SELECT FOR UPDATE 问题1 以下是一个很好的例子SELECT FOR UPDATE应该使用 Given 房间 id 标签 id 名称 room tags room id tag id room id 和
  • 无法解析符号 R,Android Studio 中的 gen 文件夹在哪里?

    我已经从 Android studio 中创建了一个虚拟 Android 项目 并且可以使其运行 但编辑器本身无法找到 R 类 事实上我找不到 gen 文件夹 我认为也许应该将该文件夹添加为源文件夹或类依赖项 但我就是找不到它 有人可以帮忙
  • 带参数的属性

    我在 VB NET 中发现了一些奇怪的东西 以前从未注意到 我有一个班在VB NET有一个带参数的属性我想在其他方面使用该属性C Class通过创建 VB NET 类的对象 但类对象不显示该属性 谁能告诉我是否可以在 C 中访问该属性 如果
  • MS Access 无限期地持有表行锁

    我们使用 MS Access 作为我们的一个系统的 GUI 但我们遇到了一个问题 即 Access 持有基础表或行的锁 这会阻止 SQL Server 对此数据运行任何更新查询 这是有问题的 因为虽然我们的访问前端只需要对此数据的只读访问
  • 用数组填充 (...rest) 参数?

    一些 as3 函数通过使用约定允许任意数量的参数来处理重载 public function doSomething rest void 我所处的情况是 我需要将数组 任意长度 的所有值传递到这种类型的函数中 我不知道如何做到这一点 建议 这
  • 关闭 Rails 2 中 Web 服务的真实性令牌?

    不仅仅是在 HTML 中填写表单 还应该可以只发送包含参数的 post 请求 例如 如果 Accept 标志设置为 application JSON 是否可以关闭真实性令牌在 HTTP 标头中 请求伪造保护的工作原理是检查请求的内容类型 并
  • 创建了奇怪的“Designer1.cs”文件

    Visual Studio 如何将文件链接到相应的 Designer cs 文件 我遇到了一种奇怪的情况 DataSet 设计器和 L2S DBML 设计器都忽略了 DataSet Designer cs 而是创建并使用了 DataSet
  • 警告 - 全局 this 对象的危险使用

    在 Google Closure Compiler 中我收到警告 警告 全局 this 对象的危险使用 这是一个例子 错误行和偏移量指的是单词的开头this function aToggle if shown toggle show els
  • 哪些 Perl 模块可用于验证子例程参数?

    我正在寻找一个通用模块来消除验证子例程和方法参数的苦差事 我在 CPAN 上浏览了各种可能性 Params Validate Params Smart Getargs Mixed Getargs Long 以及其他一些 任何有关这些或其他模
  • C++积分常量+选择运算符=问题!

    我最近在我正在开发的一些大型程序中发现了一个恼人的问题 我想了解如何以最好的方式解决它 我将代码缩减为以下最小示例 include
  • Open Liberty 中是否有连接到 IBM MQ 的“功能”,相当于 Liberty Profile 中的 wmqJmsClient-2.0?

    IBM WebSphere Liberty Profile提供了 wmqJmsClient 2 0 交互功能IBM MQ 有与开放自由相当的东西吗 更新 如果没有 看起来如此 如何将 Open Liberty 连接到 IBM MQ 我是否应
  • 如何用CSS改变滚动条位置?

    有没有办法用 CSS 改变滚动条的位置从左到右或从下到上 仅使用 CSS 右 左翻转 工作小提琴 Container height 200px overflow x auto Content height 300px Flipped dir
  • 异步上传多个文件到谷歌云存储桶

    我正在尝试使用 NodeJS 将多个文件上传到 Google Cloud Storage 存储桶 我希望在继续之前上传所有文件 我尝试了几种方法 但我似乎无法做到正确 const jpegImages await fs readdir jp
  • 如何创建到另一个 PHP 页面的链接

    我刚刚转换了一些HTML页至PHP页面 我不太熟悉PHP In my HTML页面 假设它只是一个静态网络应用程序 我可以通过播放以下内容来链接到另一个页面anchor在页面上 a href go to this page html Thi
  • 在 Oracle 中,以 1=1 开始 SQL 查询的 WHERE 子句有用吗?

    我正在与一个客户合作 该客户在 Oracle 中几乎所有 WHERE 子句都以1 1 原谅我的无知 但这不是禁止操作吗 这种用法有什么负面影响吗 这是一个经过清理的示例 SELECT gpz zname gpp pname FROM tab
  • 如何识别 ADO Pipelines 中管道的 AzureDevOps ID?

    因此 我尝试创建一个下游项目 尝试使用存储在天蓝色管道工件中的工件进行构建 我正在使用任务 下载PipelineArtifact 0 https learn microsoft com en us azure devops pipeline
  • 如何在 JavaScript 中创建该对象的键/值的所有组合?

    我有以下 JavaScript 对象结构 var options optionOne true false optionTwo true false optionThree null property1 9 property2 7 prop