JavaScript循环移除数组最小数时无法识别更新后数组的问题
问题说明
需求是通过循环执行50次数组最小数查找操作,每次通过splice()方法移除找到的最小数,最终得到升序排列的数字列表。
当前代码存在的问题是仅能查找初始数组的最小数,无法识别更新后的数组,问题复现代码如下:
array=[] for(i=0; i<50; i++) { array[i]=parseInt(Math.random()*100+1); } min = Math.min(...array) minindex = array.indexOf(min); splice = array.splice(minindex, 1) console.log(splice)
问题根因
查找最小值、定位索引、删除元素、打印结果的逻辑全部写在数组生成逻辑的外部,整个流程只执行了1次,没有跟随数组更新反复执行;同时没有专门存储每次删除的最小值,最终无法得到完整的升序列表。
修复代码
const array = []; const sortedResult = []; // 生成50个1-100的随机整数 for (let i = 0; i < 50; i++) { array[i] = parseInt(Math.random() * 100 + 1); } // 循环50次,每次操作最新的数组 for (let i = 0; i < 50; i++) { const currentMin = Math.min(...array); const minIndex = array.indexOf(currentMin); // splice返回被删除元素组成的数组,取第一位就是当前轮次的最小值 const removedMin = array.splice(minIndex, 1)[0]; sortedResult.push(removedMin); } // 打印最终升序结果 console.log(sortedResult);
关键注意点
- 所有依赖数组最新状态的逻辑(找最小值、定位索引、删除)必须放在循环内部,才能读取到每一轮删除操作后更新的数组内容
- 循环计数器建议加
let声明,避免污染全局作用域 splice()的返回值是包含被删除元素的数组,不是单个元素,需要取索引为0的项才是被删除的最小值- 需要单独定义结果数组,按顺序存储每次删除的最小值,循环结束后该数组就是目标升序列表
内容的提问来源于stack exchange,提问作者gabe
相关产品推荐
相关产品推荐

