通常,我需要判断一个Javascript数组是否是矩形的(并获取数组的维数)。在这种情况下,我的意思是判断数组中的每个元素是否都是长度相同的数组。我该如何做呢?
function getArrayDimensions(theArray){
//if the array's dimensions are 3x3, return [3, 3], and do the same for arrays of any dimension
//if the array is not rectangular, return false
}
此外,如何将此函数推广到多维数组(2x5x7、3x7x8x8等)?
7条答案
按热度按时间7xzttuei1#
这个递归函数返回给定数组的所有维度,如果一个或多个维度不是直的(即数组元素之间的大小不同),则返回false。它使用一个helper函数来确定两个简单数组是否相同(使用前请阅读函数注解)。
izj3ouym2#
这里有一个简单的递归函数可以做到这一点。写得很快,所以可能容易出错。
此函数返回每个维的长度。如果它包含不同长度的子数组,则此函数返回false。
此函数适用于不同的维度。
例如,传递一个2x3的二维数组将返回
[2, 3]
,传递一个2x3x4的三维数组将返回[2, 3, 4]
。维度(即 n d)可以通过检查返回数组的长度来获得。Demo(检查javaScript控制台:))
j91ykkif3#
使用
Array.every
如何?示例:
gajydyqb4#
更多尺寸:
shyt4zoc5#
简单的实现是检查所有内部数组的长度是否与外部数组的长度相同:
因此:
编辑
如果您想要“矩形”数组,其中每个成员数组的长度都相同,但不一定与外部数组的长度相同:
我不知道如何定义一个多维的“矩形”数组,除了说它们必须都有相同的长度。你可以通过一个函数循环成员,如果它是一个数组的数组,递归地调用它自己,直到它得到一个非数组的数组,然后调用一个类似
isRectangularArray
的函数,并传递长度来检查。w8biq8rn6#
使用
recursive
方法来获取没有大小限制的数组的维数是非常简单和直接的:示例:
jgovgodb7#
我是这样做的,如果你知道可能的尺寸,这是如此之轻: