用递归解决动态嵌套for循环

2023-11-24

我试图得到如下所示的结果:Miniors | Boys | 54kg - 62kg其中每个值均由管道 | 分隔来自包含某种“限制类型”的数组。例如:ageGroups, genders, weightClasses(如上所示)。

我现在能够得到这个结果的方法是,如果我对嵌套的 forEach 循环进行硬编码(使用 underscorejs),但这意味着我现在必须知道必须循环多少个数组才能得到想要的结果。 这工作“很好”:

var categories = [];
_.each(ageGroups, function(ageGroup) {
   _.each(gender, function(gender) {
     _.each(weightClasses, function(weightClass) {
       categories.push(ageGroup.name + ' | ' + gender.name + ' | ' + weightClass.name);
      });
   });
});

输出是一个数组(类别),其中包含限制数组的所有可能组合。

现在,我的问题是我需要一种方法来对未知数量的限制数组执行相同的操作。 我对正确解决方案的猜测是递归, BUT我还没有能够产生任何实际有效的东西,因为我还不能理解递归:)

可以在这里找到用一些测试数据准备的小提琴:jsFiddle。 小提琴使用 Angular 进行一些简单的数据绑定和调试结果输出,并使用 underscorejs 处理数组。


我最近编写了一个递归函数来创建数组的所有组合。您必须将数据转换为我的函数使用的数组数组,但这应该不难。

无论如何,这是带有可运行示例的代码:

var v = [['Miniors','Kadettes','Juniors', 'Seniors'], ['Boys','Girls','Men','Women'],['54kg - 62kg','64kg - 70kg','71kg - 78kg','79kg - 84kg']];
var combos = createCombinations(v);
for(var i = 0; i < combos.length; i++) {
  document.getElementsByTagName("body")[0].innerHTML += combos[i] + "<br/>";
}

function createCombinations(fields, currentCombinations) {
  //prevent side-effects
  var tempFields = fields.slice();

  //recursively build a list combinations
  var delimiter = ' | ';
  if (!tempFields || tempFields.length == 0) {
    return currentCombinations;
  }
  else {
    var combinations = [];
    var field = tempFields.pop();

    for (var valueIndex = 0; valueIndex < field.length; valueIndex++) {
      var valueName = field[valueIndex];

      if (!currentCombinations || currentCombinations.length == 0) {
        var combinationName = valueName;
        combinations.push(combinationName);
      }
      else {
        for (var combinationIndex = 0; combinationIndex < currentCombinations.length; combinationIndex++) {
          var currentCombination = currentCombinations[combinationIndex];
          var combinationName = valueName + delimiter + currentCombination;
          combinations.push(combinationName);
        }
      }
    }
    return createCombinations(tempFields, combinations);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用递归解决动态嵌套for循环 的相关文章

随机推荐

  • Python aiosmtpd - 邮件传输代理 (MTA) 缺少什么?

    我想用 python 编写我自己的小型邮件服务器应用程序aiosmtpd a 出于教育目的 更好地理解邮件服务器b 实现我自己的特点 所以我的问题是 缺少什么 除了 aiosmtpd 邮件传输代理 可以向 从其他完整 MTA gmail c
  • 使用指针获取数组的长度

    当我只知道指向数组的指针时 有没有办法获取数组的长度 请参阅以下示例 int testInt 3 testInt 0 0 testInt 1 1 testInt 2 1 int point point testInt Serial prin
  • 具有功能更新的数组最有效的实现是什么?

    我需要一个具有尽可能快的功能更新的类似数组的数据结构 我见过一些不同的灵活数组实现 它们为我提供了此属性 Braun 随机访问列表 但我想知道是否有一个实现专门针对我们对追加或前置不感兴趣的情况进行优化 只是更新 让 克里斯托夫 菲利亚特
  • 使用 SWIG 将 C++ char* 转换为 Java 中的 char[] 而不是 String

    我正在尝试用 Java 包装以下 C 函数 char MyClass to cstring 该函数的输出作为 Java String 对象返回 我希望它作为char Java 数组 我目前正在使用 typemaps i 和 std stri
  • 缩进中制表符和空格的使用不一致[重复]

    这个问题在这里已经有答案了 def contains sequence dna1 dna2 str str gt bool Return True if and only if DNA sequence dna2 occurs in the
  • 在x86 8086汇编中生成0-9范围内的随机数

    首先 我对 8086 Assembly 非常陌生 掌握知识对我来说相当困难 尽管如此 我还是会尽力而为 我一直在尝试编写一个代码来生成0 9范围内的随机数 在研究了几个例子和建议之后 这就是我的结论 为了简单起见 我没有对检索到的时钟计数应
  • 如何将新数据附加到新行

    我的代码如下所示 def storescores hs open hst txt a hs write name hs close 所以如果我运行它并输入 Ryan 然后再次运行并输入 Bob 文件 hst txt 看起来像 RyanBob
  • 使用不同版本的 JDK 以及相同的目标和源版本编译 Java 是否可以保证相同的执行?

    我们将把创建构建的 CI 系统从 Java 7 更新到 Java 8 稍后我们希望将项目一一迁移到 Java 8 当然 我们希望能够为仍然使用 Java 7 的旧版本创建错误修复版本 如果我们将构建相同的源 目标版本和源版本从 JDK 7
  • 在Asp.net core中间件中访问ModelState

    我需要访问ModelState在 Asp net Core 2 1 中间件中 但这只能从Controller 例如我有ResponseFormatterMiddleware在这个中间件中我需要忽略ModelState错误并在 响应消息 中显
  • 有没有办法区分 GUID 和随机数?

    在调试模糊的代码缺陷时 能够将 GUID 与随机数据区分开来非常有用 在 Windows 上 生成的每个 GUID 都是版本 4 因此它的第三部分的前半字节为 4 因此 如果 16 字节序列违反了该规则 那么它就不是版本 4 GUID 例如
  • 在 Scala 中使用“valcapacity:Int”而不是“val IntCapacity”的任何原因

    我正在读 Scala 我想知道 Why val capacity Int 代替 val Int capacity 做出这个选择的任何原因 如果不是 在我看来 放弃 Java 的声明方式似乎不是一个好的选择 会使从 Java 到 Scala
  • 如何将单个故事板 uiviewcontroller 用于多个子类

    假设我有一个故事板 其中包含UINavigationController作为初始视图控制器 它的根视图控制器是UITableViewController 即BasicViewController 它有IBAction连接到导航栏的右侧导航按
  • 我可以将所有标准 Python 库与 IronPython 一起使用吗?

    它需要某种包装吗 我当时认为 IronPython 是 Python 的 NET 实现 它以某种方式神奇地使使用 IronPython 构建的应用程序能够使用标准 Python 库 我相信它是原始 py 源或打包到鸡蛋中的 py 源 但是当
  • 将 Node crypto aes-256-cbc 转换为 CryptoJS

    如何转换以下Node的内置加密模块加密 to CryptoJS const crypto require crypto const pass some password with gt spec chars const cipher1 cr
  • 鼠标点击触发shift

    我可以触发点击事件element selector using trigger element selector trigger click Is it possible to trigger shift click I mean shif
  • 有哪些技术可用于发送短信? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在考虑向订阅用户列表发送定期自动短信 在使用过 Windows Mobile 设备后 我可以使用紧凑的 Net 框架 连接到 USB 的设备轻松
  • InputConnection.finishCompositingText() 方法中的空指针异常[重复]

    这个问题在这里已经有答案了 我在 inputmethod InputConnection finishCompositingText 中收到 NPE 日志消息如下 java lang NullPointerException Attempt
  • 动态应用内购买

    这个问题 Android 应用内计费动态产品列表 是在 3 年前被问到的 Android 仍然无法使用动态应用内购买项目吗 我希望实现此类功能的原因是因为我的应用程序提供了一种让某些用户创建自己的应用程序内购买以供其他人购买的方法 似乎另一
  • 为什么在向量循环中使用“!=”比使用“<”更好?(C++)

    为什么在向量循环中使用 比使用 因为您正在使用迭代器 并且它会使循环看起来与其他容器完全相同 所以您是否应该选择切换到其他容器类型 例如 set list unordered set 等 其中
  • 用递归解决动态嵌套for循环

    我试图得到如下所示的结果 Miniors Boys 54kg 62kg其中每个值均由管道 分隔来自包含某种 限制类型 的数组 例如 ageGroups genders weightClasses 如上所示 我现在能够得到这个结果的方法是 如