Javascript 如何获得垂直和对角对齐的数组元素?

Javascript 如何获得垂直和对角对齐的数组元素?,javascript,arrays,algorithm,sorting,tic-tac-toe,Javascript,Arrays,Algorithm,Sorting,Tic Tac Toe,所以,我这里有一个数组,我想做的是创建一个名为car的新数组,并保存“数组”中的元素,这些元素是垂直对齐的([0,4,8,12],[1,5,9,13]…),以及对角对齐的([0,5,10,15],[1,6,11],[2,7],[3],[4,9,14]等等… 我怎么能这么做 let array = [ [ 0, 1, 2, 3 ], [ 4, 5, 6, 7 ], [ 8, 9, 10, 11 ], [ 12, 13, 14, 15 ] ] 实际上,对于您期望

所以,我这里有一个数组,我想做的是创建一个名为car的新数组,并保存“数组”中的元素,这些元素是垂直对齐的
([0,4,8,12],[1,5,9,13]…)
,以及对角对齐的
([0,5,10,15],[1,6,11],[2,7],[3],[4,9,14]等等…
我怎么能这么做

let array = [
  [  0,  1,  2,  3 ],
  [  4,  5,  6,  7 ],
  [  8,  9, 10, 11 ],
  [ 12, 13, 14, 15 ]
]

实际上,对于您期望的解决方案,我根本不会使用数组

要查看游戏板上的一系列引脚(例如Tic Tac Toe或Connect Four)是否水平、垂直或对角连接,只需使用简单代数:

在你看来,翻译电路板的方式是将每一行放在前一行的旁边,例如:

| 0 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 |   =>   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ...
...

你会注意到,董事会的头寸将变成普通指数

在本例中,索引
1
和索引
5
垂直连接,因为电路板的宽度为
4
。因此,垂直连接引脚之间的距离始终是电路板的宽度(即,如果电路板的宽度为
4
,则
1
+
4
=
5

因此,确定管脚是垂直连接、水平连接还是对角连接的函数可以像下面这样简单(我在这里使用非常简单和详细的实现进行演示。如果您的数学知识更高,请随意优化*):

我将
isDiagonallyConnected
函数的实现留给您进行实验



*例如,
isVerticallyConnected
函数的优化版本可以是:
return Math.Abs(indexB-indexA)==\u boardWidth

应更新问题,以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。是否尝试将数字右对齐显示?如果是,考虑PADSTART()函数。“保存”应该做什么?是否保存到磁盘?是否以新的排序顺序保存到新数组
car
?保存到…?您在这里一次问两个问题。调用切换二维数组(或矩阵,如果愿意)的行和列。请看:对角线是否为
[0,5,10,11],[1,6,11,12],[2,7,8,13]
等。好吗?从另一个角度看,对角线是怎样的呢
[0,7,10,14]
等等。?
const _boardWidth = 4;

function isHorizontallyConnected(indexA, indexB)
{
  const rowA = Math.Floor(indexA / _boardWidth);
  const rowB = Math.Floor(indexB / _boardWidth);

  if (rowA === rowB && Math.Abs(indexB - indexA) === 1) return true;

  return false;
}

function isVerticallyConnected(indexA, indexB)
{
  const rowA = Math.Floor(indexA / _boardWidth);
  const rowB = Math.Floor(indexB / _boardWidth);
  const columnA = indexA % _boardWidth;
  const columnB = indexB % _boardWidth;

  if (columnA === columnB && Math.Abs(rowB - rowA) === 1) return true;

  return false;
}

function isDiagonallyConnected(indexA, indexB)
{
  ...
}