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

不使用sort()方法排序JavaScript数组时的循环及元素删除问题

问题分析与解决方案

代码异常原因

  1. 错误使用for...in遍历数组:for...in是为遍历对象属性设计的,用来遍历数组时会拿到字符串类型的索引,且当原数组通过splice缩短长度后,for...in的遍历次数不会动态调整,导致循环无法正常结束。
  2. 未收集排序结果:代码中仅执行了splice删除原数组元素,但没有将删除的元素添加到newArr中,最终返回的是空数组。

修复后的排序代码

// 找出数组中最小元素的索引
const least_num = (arr) => {
  let smallest = arr[0];
  let smallest_index = 0;
  for(let i = 1; i < arr.length; i++){
    if (arr[i] < smallest) {
      smallest = arr[i];
      smallest_index = i;
    }
  }
  return smallest_index;
}

const sortArray = (arr) => {
  // 复制原数组,避免修改传入的原始数组
  const tempArr = [...arr];
  const newArr = [];
  // 使用while循环,直到临时数组为空
  while(tempArr.length > 0){
    const smallestIndex = least_num(tempArr);
    // 将删除的最小元素推入新数组
    newArr.push(tempArr.splice(smallestIndex, 1)[0]);
  }
  return newArr;
}

console.log(sortArray([5,4,3,2,1])); // 输出:[1,2,3,4,5]

JavaScript中通过索引删除数组元素的方法

1. splice方法(推荐,直接修改原数组)

语法:array.splice(index, deleteCount)

  • index:要删除元素的起始索引
  • deleteCount:要删除的元素数量
    示例:
const arr = [1,2,3,4];
const deletedItems = arr.splice(1, 2); // 删除索引1开始的2个元素
console.log(arr); // 输出:[1,4]
console.log(deletedItems); // 输出:[2,3]

2. slice方法(不修改原数组,返回新数组)

通过截取索引前后的部分数组再拼接,实现删除效果:

const arr = [1,2,3,4];
const newArr = arr.slice(0, 1).concat(arr.slice(3)); // 删除索引1、2的元素
console.log(arr); // 原数组不变:[1,2,3,4]
console.log(newArr); // 输出:[1,4]

3. delete操作符(不推荐)

使用delete会将对应索引位置的值设为undefined,但数组长度不变,会留下空位:

const arr = [1,2,3,4];
delete arr[1];
console.log(arr); // 输出:[1, undefined, 3, 4]

内容的提问来源于stack exchange,提问作者ram Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:54