如何获取多维Javascript数组的维度?

15 浏览
0 Comments

如何获取多维Javascript数组的维度?

通常,有一些情况下我需要确定一个Javascript数组是否是矩形的(并获取数组的维度)。在这种情况下,我指的是确定数组的每个元素是否都是具有相同长度的数组。我该如何做到这一点?

function getArrayDimensions(theArray){
    //如果数组的维度是3x3,则返回[3, 3],并且对于任意维度的数组也一样
    //如果数组不是矩形的,则返回false
}

另外,如何将该函数推广到多维数组(2x5x7,3x7x8x8等)?

0
0 Comments

如何获取多维Javascript数组的维度?

在处理多维数组时,有时需要获取该数组的维度。例如,我们可能需要知道数组的行数和列数,或者数组的总维度。

解决这个问题的方法是使用Array.every方法。这个方法可以用来检查数组中的每个元素是否满足特定条件。我们可以利用这个方法来检查多维数组的每个子数组的长度是否相同,从而确定数组的维度。

下面是一个示例代码:

var firstLen = ar[0].length;
var isRectangular = ar.every(function(item) {
  return item.length == firstLen;
});

在这个示例中,我们首先获取多维数组的第一个子数组的长度。然后,我们使用Array.every方法对多维数组的每个子数组进行遍历,并检查它们的长度是否等于第一个子数组的长度。如果所有子数组的长度都相等,那么isRectangular变量将被设置为true,表示多维数组是一个矩形数组。

如果想了解更多关于Array.every方法的信息,可以查看以下相关文档:

developer.mozilla.org/en-US/docs/JavaScript/Reference/...

需要注意的是,上述方法只适用于ECMAScript 5浏览器,例如IE9和其他现代浏览器。如果需要支持旧版本的浏览器,可以在上述链接中找到为旧浏览器编写every函数的示例代码。

另外,需要注意的是,上述方法只适用于二维数组。如果要测试三维或四维数组,需要将这个需求包含在问题中,而不是作为附加的注释。

0
0 Comments

如何获得多维Javascript数组的维度?

问题的出现原因:

- 需要编写一个递归函数来返回给定数组的所有维度,或者如果一个或多个维度不是直线的(即数组项之间的大小不同)则返回false。

- 需要使用一个辅助函数来确定两个简单数组是否相同。

- 需要检查参数是否为数组,因为length属性可能是任何值,而不一定是数组。

- 需要处理对象的情况。

解决方法(代码):

// pre: a !== b, each item is a scalar
function array_equals(a, b)
{
  return a.length === b.length && a.every(function(value, index) {
    return value === b[index];
  });
};
function getdim(arr)
{
  if (!arr.length) {
    return []; // current array has no dimension
  }
  var dim = arr.reduce(function(result, current) {
    // check each element of arr against the first element
    // to make sure it has the same dimensions
    return array_equals(result, getdim(current)) ? result : false;
  }, getdim(arr[0]));
  // dim is either false or an array
  return dim && [arr.length].concat(dim);
}
console.log(getdim(123)); // []
console.log(getdim([1])); // [1]
console.log(getdim([1, 2])); // [2]
console.log(getdim([1, [2]])); // false
console.log(getdim([[1, 2], [3]])); // false
console.log(getdim([[1, 2],[1, 2]])); // [2, 2]
console.log(getdim([[1, 2],[1, 2],[1, 2]])); // [3, 2]
console.log(getdim([[[1, 2, 3],[1, 2, 4]],[[2, 1, 3],[4, 4, 6]]])); // [2, 2, 3]
console.log(getdim([[[1, 2, 3], [1, 2, 4]], [[2, 1], [4, 4]]])); // false

其他信息:

- 通过比较两个数组来确定它们是否相等。

- 修复了一个bug,当数组为空时返回空数组。

- 修复了使用对象时的问题。

- 提供了一个jsfiddle链接,以获取更多关于问题的解答。

是否解决了问题?

- 问题是否解决还有待确定。

0
0 Comments

如何获取多维Javascript数组的维度?

要解决这个问题,可以使用一个简单的递归函数。这个函数返回每个维度的长度。如果数组包含长度不同的子数组,这个函数将返回false。这个函数适用于不同的维度。例如,传递一个2x3的二维数组将返回[2, 3],传递一个2x3x4的三维数组将返回[2, 3, 4]。可以通过检查返回数组的长度来获取数组的维度(即n维)。

下面是一个实现该功能的代码示例:

// 数组维度检查器
// 返回值:
//   如果数组维度不同,则返回false
//   如果数组是矩形的(即0维数组或>=1维数组),则返回一个数组
function arrayDimension(a) {
    // 确保a是一个数组
    if (a instanceof Array) {
        // 第一个元素是一个数组
        var sublength = arrayDimension(a[0]);
        if (sublength === false) {
            // 维度不同
            return false;
        } else {
            // 比较每个元素,确保它们具有相同的维度
            for (var i = 1; i < a.length; i++) {
                var _sublength = arrayDimension(a[i]);
                // HACK: 比较数组...
                if (_sublength === false || sublength.join(",") != _sublength.join(",")) {
                    // 如果维度不同(即不是矩形数组)
                    return false;
                }
            }
            // 现在它是“矩形”的(你可以称3维为“矩形”吗?)
            return [a.length].concat(sublength);
        }
    } else {
        // 不是一个数组
        return [];
    }
}

以上是一个用于获取数组维度的函数。可以在此处查看一个演示。

这个函数适用于任意维度的数组,不仅仅适用于二维数组。在演示中,我使用了一个三维数组,证明了这个函数可以处理更高的维度。你还可以尝试创建一个四维数组进行测试。

经过测试,这个函数对于我所测试的所有多维数组都返回了正确的结果。如果每个元素的长度相同,这个函数返回的是最大深度。请注意,我已经修改了代码,确保其行为与之前的版本不同。另外,请注意Jack的答案中的评论。

0