Javascript 验证2D数组每行具有相同长度的最快/最优雅的方法?
假设我有一个2D数组:Javascript 验证2D数组每行具有相同长度的最快/最优雅的方法?,javascript,arrays,matrix,Javascript,Arrays,Matrix,假设我有一个2D数组: const matrixRegular = [ ['a', 'b', 'c'], ['e', 'f', 'g'], ]; 假设我想验证此矩阵中的每一行都具有相同的长度,因此上面的示例是有效的矩阵,但下面的示例不是: const matrixIrregular = [ ['a', 'b', 'c'], ['e', 'f'] ]; 什么是干净/优雅的方式?这是我的一条班轮: const isRegularMatrix = matrix =&
const matrixRegular = [
['a', 'b', 'c'],
['e', 'f', 'g'],
];
假设我想验证此矩阵中的每一行都具有相同的长度,因此上面的示例是有效的矩阵,但下面的示例不是:
const matrixIrregular = [
['a', 'b', 'c'],
['e', 'f']
];
什么是干净/优雅的方式?这是我的一条班轮:
const isRegularMatrix = matrix => new Set(data.map(row => row.length)).size === 1
将矩阵转换为一个只有行长度的数组,然后使用Set
确保每个元素都是重复的(相同的长度),因此大小为1。您可以使用every()
并将每个数组的length
与第一个数组的长度进行比较
const isRegularMatrix = matrix => matrix.every(x => x.length === matrix[0].length)
如果矩阵有0行,则函数将返回false。这是您已经考虑过的吗?我认为
every()
会更好一些,因为一旦找到第一个不规则的行,它就会停止flat()
必须遍历所有行。所有答案(包括@Kousha建议的答案)都是O(n),其中n是行数,因此我会选择一个更容易阅读的答案,我认为every()
也是最好的答案。编辑:仔细想想,flat()
实际上不起作用。它将把[[1],[1,2,3],[1,2]]
视为有效的矩阵。同意,为了完整起见,我将添加一个matrix=>matrix.length&&matrix[0]。构造函数===数组和矩阵。每个(…)
Maheer请修复您的答案flat()
不起作用(请参阅我的其他评论)。@LucioPaiva噢,谢谢你提供我没有想到的信息。对于该输入,flat()
永远无法工作。我把它删掉了。@MaheerAli你也有打字错误<代码>martix。每个都拼写为martix,而不是矩阵。