什么是写入一个函数的最有效和/或最可读的方法,该函数接受一个数组并返回该数组的多维度。现在可以假定数组只包含基本类型。查找JavaScript数组的维度
例子。
var arr = [[1,2],[3,4],[5,6]]
function findDim(a){
//logic goes here
}
findDim(arr); // returns 2
什么是写入一个函数的最有效和/或最可读的方法,该函数接受一个数组并返回该数组的多维度。现在可以假定数组只包含基本类型。查找JavaScript数组的维度
例子。
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));
FYI:对于较旧的浏览器检查polyfill option of Array.isArray
method。
UPDATE:柜面它包含不同尺寸的阵列和你想获得更深的尺寸,然后用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));
“维度”没有很好地对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]))
这是我该怎么做。它适用于不规则多维阵列;
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))
什么会是这一个 “维”:'[1,[2,3],[[4]]]'? – georg
我们可以说这个函数应该计算最大维度 - 所以3. – gilmatic