What is the most efficient and/or most readable way to write a function that takes in an array and returns the degree of multi-dimensionality of that array. For now it can be assumed that the arrays only contain primitive types.
Example.
var arr = [[1,2],[3,4],[5,6]]
function findDim(a){
//logic goes here
}
findDim(arr); // returns 2
Use recursion and Array.isArray
method to check element is an array.
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 : For older browser check polyfill option of Array.isArray
method.
UPDATE : Incase it contains different dimensioned array and you want to get the deeper dimension then use Array#map
and Math.max
methods.
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));
Or with Array#reduce
method to get the max value.
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));
"Dimensionality" is not well defined for js arrays (which are not necessary matrices), here's a function to find the max "depth" of the array:
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]))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With