最快/最优雅的方法来验证2D数组每行的长度相同吗?

Kou*_*sha 2 javascript arrays matrix

假设我有一个2D数组:

const matrixRegular = [
    ['a', 'b', 'c'],
    ['e', 'f', 'g'],
];
Run Code Online (Sandbox Code Playgroud)

假设我要验证此矩阵中的每一行都具有相同的长度,因此上面的示例是有效的矩阵,但下面的示例不是:

const matrixIrregular = [
    ['a', 'b', 'c'],
    ['e', 'f']
];
Run Code Online (Sandbox Code Playgroud)

干净/优雅的方法是什么?这是我的一线客:

const isRegularMatrix = matrix => new Set(data.map(row => row.length)).size === 1
Run Code Online (Sandbox Code Playgroud)

将矩阵转换为仅具有行长的数组,然后用于Set确保每个元素都是重复的(相同长度),因此它的大小为1。

Mah*_*Ali 13

您可以使用每个数组并将其与第一个数组的长度every()进行比较length

const isRegularMatrix = matrix => matrix.every(x => x.length === matrix[0].length)
Run Code Online (Sandbox Code Playgroud)

  • 我认为`every()`会更好一些,因为一旦找到第一个不规则行,它就会停止。flat()必须遍历所有行。但是,所有答案(包括@Kousha建议的答案)都是O(n),其中n是行数,因此我选择一个更易于阅读的答案,我认为`every()`也是最好的一。编辑:再三考虑,`flat()`实际上不起作用。它将[[[1],[1,2,3],[1,2]]`视为有效矩阵。 (2认同)