2016-08-30 19 views
7

Cách hiệu quả nhất và/hoặc dễ đọc nhất để viết một hàm nhận trong mảng là gì và trả về mức độ đa chiều của mảng đó. Bây giờ có thể giả thiết rằng các mảng chỉ chứa các kiểu nguyên thủy.Tìm kích thước của một mảng javascript

Ví dụ.

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

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

    findDim(arr); // returns 2 
+1

Điều gì sẽ là "chiều" một này: '[1, [2,3], [[4]]]'? – georg

+0

chúng ta có thể nói chức năng này nên tính toán tối đa dimenstionality - vì vậy 3. – gilmatic

Trả lời

9

Sử dụng đệ quy và Array.isArray phương pháp để kiểm tra phần tử là một mảng.

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: Đối với kiểm tra trình duyệt cũ hơn polyfill option of Array.isArray method.


UPDATE: Trong trường hợp nó chứa mảng kích thước tương khác nhau và bạn muốn để có được kích thước sâu hơn sau đó sử dụng Array#mapMath.max phương pháp.

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));


Hoặc với Array#reduce phương pháp để có được giá trị tối đa.

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

Bây giờ nó 'là tốt hơn nhiều – Redu

+1

'function (v) {return findD (v)}' không có ý nghĩa nhiều mặc dù. – georg

+0

@georg: oops Tôi chỉ nhớ rằng ... cảm ơn :) –

2

"đa chiều" không được xác định rõ đối với mảng js (mà không phải là ma trận cần thiết), đây là một chức năng để tìm ra max "chiều sâu" của mảng:

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

Đây là câu trả lời duy nhất hoạt động (tốt .. cùng với của tôi - :)) – Redu

+0

@Redu: tốt, OP không nói cách họ (hoặc giáo viên của họ) muốn xử lý các mảng không thường xuyên ... không chắc chính xác cái gì là "đúng" ở đây. – georg

1

Đây là cách tôi sẽ làm. Nó hợp lệ cho các mảng đa chiều bất thường;

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))

Các vấn đề liên quan