You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js手动实现数组排序:代码为何仅输出两个元素?

问题解析与代码修正

核心问题:splice方法的误用

你的代码里的arr.splice(arr.indexOf(min))写法错误——splice如果只传入一个参数,会从该索引位置开始删除数组中所有剩余元素,而不是只删除目标元素。这直接导致原数组长度快速缩短,循环提前终止。

逐次循环的运行逻辑

我们以输入数组[100, 83, 32, 9, 45, 61]为例,拆解每一步:

  • 第一次循环(i=0)
    1. 找到数组最小值9,对应索引3
    2. 执行arr.splice(3):删除索引3及之后的所有元素,原数组变为[100, 83, 32]
    3. newArray推入9,此时newArray = [9]
    4. i自增为1,当前arr.length=3,满足i < arr.length,进入下一次循环
  • 第二次循环(i=1)
    1. 找到数组最小值32,对应索引2
    2. 执行arr.splice(2):删除索引2及之后的元素,原数组变为[100, 83]
    3. newArray推入32,此时newArray = [9, 32]
    4. i自增为2,当前arr.length=2,2 < 2不成立,循环直接终止

这就是为什么最终只得到两个元素的结果。

修正后的代码

只需要给splice添加第二个参数1,指定仅删除目标索引的单个元素;同时建议复制原数组操作,避免修改传入的原始数组:

function sortArray(arr) {
  let newArray = [];
  let tempArr = [...arr];
  for (let i = 0; i < tempArr.length; i++) {
    let min = Math.min(...tempArr);
    let minIndex = tempArr.indexOf(min);
    newArray.push(min);
    tempArr.splice(minIndex, 1); // 仅删除找到的最小元素
  }
  return newArray;
}
console.log(sortArray([100, 83, 32, 9, 45, 61])); // 输出 [9, 32, 45, 61, 83, 100]

内容的提问来源于stack exchange,提问作者Shraddha Vkarma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:06:24