如何编写一个函数,以最高效或最易读的方式接受一个数组并返回该数组的多维度量。目前可以假设这些数组仅包含基本类型。
示例:
var arr = [[1,2],[3,4],[5,6]]
function findDim(a){
//logic goes here
}
findDim(arr); // returns 2
如何编写一个函数,以最高效或最易读的方式接受一个数组并返回该数组的多维度量。目前可以假设这些数组仅包含基本类型。
示例:
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));
注意:对于旧版本的浏览器,请检查 Array.isArray
方法的 polyfill 选项。
更新:如果它包含不同维度的数组并且您想要获取更深层次的维度,则使用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));
function(v) { return findD(v) }
虽然看起来没有太多意义。 - georg对于不是矩阵的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