JavaScript如何获取任意深度多层嵌套数组的最大与最小元素
JavaScript多层嵌套数组求最大/最小值实现方案
需求说明
需要对任意深度的嵌套数字数组,提取所有元素后计算最大值与最小值,待处理示例数组如下:var arry = [1,2,[14,56,34,[48,98]],[14,16,11,[18,81]],34,35]
实现思路
- 第一步将多层嵌套数组拍平为一维数组,ES2019+ 支持
Array.prototype.flat()方法,传入参数Infinity即可拍平任意深度的嵌套结构 - 第二步对拍平后的数组,配合
Math.max()、Math.min()方法计算极值即可
高版本ES最简实现代码
// 示例数组 const arry = [1,2,[14,56,34,[48,98]],[14,16,11,[18,81]],34,35]; // 拍平任意深度嵌套数组 const flatArry = arry.flat(Infinity); // 计算最大值、最小值 const maxValue = Math.max(...flatArry); const minValue = Math.min(...flatArry); console.log(maxValue); // 输出结果:98 console.log(minValue); // 输出结果:1
低版本兼容实现方案
如果运行环境不支持flat方法和扩展运算符,可以用递归+apply方法实现:
// 自定义递归拍平数组方法 function flatten(arr) { let result = []; for (let item of arr) { if (Array.isArray(item)) { result = result.concat(flatten(item)); } else { result.push(item); } } return result; } const arry = [1,2,[14,56,34,[48,98]],[14,16,11,[18,81]],34,35]; const flatArry = flatten(arry); const maxValue = Math.max.apply(null, flatArry); const minValue = Math.min.apply(null, flatArry);
注意事项
- 需确保数组内所有非数组元素都是数字类型,否则计算极值会返回
NaN - 空数组场景需要提前做边界判断,避免
Math.max()返回-Infinity、Math.min()返回Infinity的异常结果
内容的提问来源于stack exchange,提问作者Sooraj s
相关产品推荐
相关产品推荐

