问题:给出下面的数据,请编写函数求数组的最大值。
1
2
3
4
5
6
let data = [
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, [39, 43, [99, 81]]],
12
];

方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function findMax(arr) {

/* 整理数组元素 */
arr.forEach((item, index) => {
if (Array.isArray(item)) {
/* 递归调用 */
arr[index] = findMax(item);
}
});

/* 数组排序 */
arr.sort(function(a, b) {
return b - a;
});

/* 总是取最大值 */
return arr[0];
}

优化下代码,把利用 sort 排序求最大值的部分调整为 Math.max 方法。

1
2
3
4
5
6
7
8
function findMax(arr) {
arr.forEach((item, index) => {
if (Array.isArray(item)) {
arr[index] = findMax(item);
}
});
return Math.max(...arr);
}