在2d数组上首先运行x与y首先运行的结构

Mar*_*ahn 6 javascript algorithm design-patterns

我希望将一个标志传递给一个通过col-scanning或row-scanning运行算法的函数:

if run-on-x
  for 1..x
    for 1..y
      do something with ary[x][y]

else
  for 1..y
    for 1..x
      do something with ary[x][y]
Run Code Online (Sandbox Code Playgroud)

但我不想复制所有的循环和逻辑.

我想出来了:

let numPx = width * height;
for (let px = 0; px < numPx; px++) {
  let [x, y] = yAxis ? [px % width, 0 | px / width] : [0 | px / height, px % height];
Run Code Online (Sandbox Code Playgroud)

但我认为所有的数学都很重,特别是当我在相当大的数组上运行时.

有一个更好的方法吗?

IfT*_*rue 2

也许只需将它们作为参数传递,如下所示?:

  function colRowScan(1stAxis,2ndAxis)
      for 1.. 1stAxis
        for 1.. 2ndAxis
          do something with ary[x][y]
Run Code Online (Sandbox Code Playgroud)

如果没有看到“做某事”是什么,我不知道是否有任何不可预见的原因导致这不起作用,但考虑到您发布的内容,它应该可以解决问题。

我不完全确定你想在这里做什么:

let numPx = width * height;
for (let px = 0; px < numPx; px++) {
  let [x, y] = yAxis ? [px % width, 0 | px / width] : [0 | px / height, px % height];
Run Code Online (Sandbox Code Playgroud)