JavaScript如何不使用数组内置方法获取数组最大、中间、最小值
补全实现代码
实现严格遵循要求:全程不调用任何数组内置方法,手动完成遍历、比较、排序逻辑,最终计算出目标数组的最大值、中间值、最小值。
补全后的可运行代码如下:
function BigNumebr(e) { let num = ["19", "25" , "30" , "13", "22"] const arrLength = 5; // 初始化存储数值的数组,避免后续字符串按字典序比较产生误差 let sortedNum = [0, 0, 0, 0, 0]; // 基础for循环遍历,仅通过索引访问元素,不调用数组内置遍历方法 for (let i = 0; i < arrLength; i++) { sortedNum[i] = num[i] - 0; } // 手动实现升序排序:相邻元素两两比较,不符合顺序就交换位置 for (let i = 0; i < arrLength - 1; i++) { for (let j = 0; j < arrLength - 1 - i; j++) { if (sortedNum[j] > sortedNum[j + 1]) { let temp = sortedNum[j]; sortedNum[j] = sortedNum[j + 1]; sortedNum[j + 1] = temp; } } } // 从排序完成的数组中按位置取值 const min = sortedNum[0]; const middle = sortedNum[2]; // 长度为5的数组,正中间元素索引为2 const max = sortedNum[4]; return { max, middle, min } }
实现逻辑说明
- 首先通过基础
for循环遍历原数组,将字符串格式的数字转为数值类型,避免字符串字典序比较导致的结果错误(例如字符串比较时"13"会大于"30",不符合数值比较预期) - 手动实现相邻元素比较交换的排序逻辑,全程不调用数组内置的
sort方法,最终得到升序排列的数组 - 排序完成后直接通过索引取值:升序数组首位为最小值,固定长度为5的数组正中间索引2对应的是中间值,末位为最大值
- 全程仅通过索引访问、赋值操作数组元素,未使用
forEach、map、push、slice等任何数组原型内置方法,符合要求
函数调用测试结果:执行
BigNumebr()会返回{max: 30, middle: 22, min: 13},结果正确。
内容的提问来源于stack exchange,提问作者Abdo Adel
相关产品推荐
相关产品推荐

