2016-08-30 57 views
7

什么是写入一个函数的最有效和/或最可读的方法,该函数接受一个数组并返回该数组的多维度。现在可以假定数组只包含基本类型。查找JavaScript数组的维度

例子。

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

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

    findDim(arr); // returns 2 
+1

什么会是这一个 “维”:'[1,[2,3],[[4]]]'? – georg

+0

我们可以说这个函数应该计算最大维度 - 所以3. – gilmatic

回答

9

使用递归和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));


FYI:对于较旧的浏览器检查polyfill option of Array.isArray method


UPDATE:柜面它包含不同尺寸的阵列和你想获得更深的尺寸,然后用Array#mapMath.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));

+1

现在'好多了 – Redu

+1

'函数(v){return findD(v)}'虽然没有多大意义。 – georg

+0

@georg:oops我只是错过了...谢谢:) –

2

“维度”没有很好地对JS阵列(其不是必需的矩阵)所定义的,这里的查找阵列的最大“深度”的函数:

maxDepth = x => Array.isArray(x) 
 
    ? 1 + Math.max.apply(this, x.map(maxDepth)) 
 
    : 0 
 
; 
 

 
console.log(maxDepth([[1,2],[3,4],[5,6]])) 
 
console.log(maxDepth([[[[1]]], 2]))

+0

这是唯一一个有效的答案(以及..与我一起:)) – Redu

+0

@Redu:好吧,OP没有说他们是如何或他们的老师)想要处理不规则的数组...不完全确定什么是更正确的。 – georg

1

这是我该怎么做。它适用于不规则多维阵列;

var arr = [[1,2],[3,4],[5,[6,[7,[8]]]]], 
 
findDim = a => Math.max(...a.map(e => Array.isArray(e) ? findDim(e) : 0)) + 1 
 
console.log(findDim(arr))