【问题标题】:I need to create a Logic that creates a new loop per item based on the Input Array我需要创建一个基于输入数组为每个项目创建一个新循环的逻辑
【发布时间】:2021-05-10 05:28:54
【问题描述】:

我需要创建一个嵌套的逻辑,循环的数量基于输入的数组长度。

这个数组可以有N个值,数组的名字是penalities,我需要根据这个交互来制定我的逻辑。

如果输入数组长度N为3,如penalities数组[1, 2, 3]

我的代码需要结果

for (let x = 1; x <= 2; x += 0.1) {
   for (let y = 1; y <= 2; y += 0.1) {
      for (let z = 1; z <= 2; z += 0.1) {
         const penalities = [x, y, z];
         myFunction(penalities);
      }
   }
}
enter code here

                                                       

如果输入数组长度N为4,如penalities array= [1, 2, 3, 4]

我的代码需要结果

for (let x = 1; x <= 2; x += 0.1) {
   for (let y = 1; y <= 2; y += 0.1) {
      for (let z = 1; z <= 2; z += 0.1) {
          for (let k = 1; k <= 2; k += 0.1) {
            const penalities = [x, y, z, k];
             myFunction(penalities);
          }
      }
   }
}

如何使这个迭代逻辑通用以接收数组内的任何数量,而不必创建 N 嵌套。

【问题讨论】:

  • 为什么有时valuearray.length - 1 对数组中的项目做了什么?你有内在逻辑的例子吗?
  • 在循环内l 时是否需要访问ijk
  • 你可能不需要嵌套fors,这就是人们问的原因。例如,您也许可以使用遍历数组 N 次的单个循环。
  • 递归方法的草图...function f(i, arr) { for (let j = 0; j &lt; arr.length; j++) { if (i) { f(i - 1, arr); } else { ... } } }

标签: javascript node.js loops for-loop nested-loops


【解决方案1】:

您可以采用递归方法,并为每个循环的值获取一个索引数组。

function iterate(array, cb) {
    function iter(index) {
        for (let i = 0, l = array[index]; i < l; i++) {
            indices[index] = i;
            if (index + 1 === array.length) cb(indices);
            else iter(index + 1);
        }
    }
    const indices = [];
    iter(0);
}

iterate([3, 2, 2, 4], indices => console.log(...indices));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 我很抱歉这个混乱的问题,但这正是我需要的逻辑。谢谢。
  • 玩了一会儿这个功能,不得不说它真的很好,对你的答案投了赞成票。 @OP你的问题很可怕,没有难过的感觉。编码愉快。
猜你喜欢
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2016-03-25
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多