javascript - 查找 javascript 数组的维数

标签 javascript arrays

编写接受数组并返回该数组的多维度的函数的最有效和/或最可读的方法是什么。现在可以假设数组只包含原始类型。

例子。

    var arr = [[1,2],[3,4],[5,6]]

    function findDim(a){
    //logic goes here
    }

    findDim(arr); // returns 2

最佳答案

使用递归和 Array.isArray 检查元素是否为数组的方法。

var arr = [
  [1, 2],
  [3, 4],
  [5, 6]
];

function findD(arr) {
  // check the element is an array then do 
  // recursion to check it's element
  if (Array.isArray(arr)) {
    return 1 + findD(arr[0]);
  }
  // else return `0` since it's not
  // a nested array
  return 0;
}

console.log(findD(arr));


仅供引用:对于较旧的浏览器,请检查 polyfill option of Array.isArray method .


更新: 如果它包含不同维度的数组,并且您想获得更深的维度,请使用 Array#map Math.max 方法。

var arr = [
  [1, 2],
  [3, 4],
  [5, [6]]
];

function findD(arr) {
  // return 0 if not array else return the max value 
  // by finding all elements dimension
  return Array.isArray(arr) ?
    // generate the dimension value array 
    1 + Math.max.apply(Math, arr.map(findD)) : 0;
}

console.log(findD(arr));


或者用 Array#reduce 获取最大值的方法。

var arr = [
  [1, 2],
  [3, [4,[[3]]]],
  [5, [6]]
];

function findD(arr) {
  // return 0 if not array else return the max value 
  // by finding all elements dimension
  return Array.isArray(arr) ? 1 + arr.reduce(function(a, b) {
    // get the largest by comparing all the adjuscent 
    // elements dimension
    return Math.max(a, findD(b));
  }, 0) : 0;
}

console.log(findD(arr));

关于javascript - 查找 javascript 数组的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39233251/

相关文章:

javascript - Mouseenter 和 mouseleave 动画

java - telnet 连接输入流阻塞为什么?

javascript - 除了引用一个对象的许多事件监听器和函数之外,还有什么更好的方法呢?

arrays - 如何将一组未知数量的参数传递给 MATLAB 中的函数?

c - 如何知道传递给函数的 char 数组的大小(以字节为单位)?

javascript - 如何避免数组中的重复对象并仅更新 Angular 2 中的项目数量

类中的 JavaScript/jQuery 变量作用域 (this)

javascript - 重新加载页面时保持页面设置

ruby-on-rails - 在 Ruby on Rails 中正确使用 REJECT 方法——帮助我将多行代码转换为 Ruby 单行代码

c++ - 多维数组与平面数组 - 性能比较