亚洲步兵一区二区三区-日韩精品伦理在线一区-亚洲色诱视频免费观看-久久人妻视频免费观看

廣州總部電話:020-85564311
廣州總部電話:020-85564311
20年
互聯網應用服務商
請輸入搜索關鍵詞
知識庫 知識庫

優網知識庫

探索行業前沿,共享知識寶庫

JavaScript 排序完全指南:從基礎到高階實戰

發布日期:2025-08-18 17:47:24 瀏覽次數: 812 來源:艾小碼
推薦語
JavaScript排序全攻略:從基礎方法到高階算法,一文掌握數組排序的核心技巧。

核心內容:
1. JavaScript內置sort()方法的使用與自定義排序邏輯
2. 經典排序算法(冒泡排序、快速排序)的實現與性能分析
3. 高級排序技巧與實戰應用場景
小優 網站建設顧問
專業來源于二十年的積累,用心讓我們做到更好!

排序是数据处理的核心操作,JavaScript 提供了多种灵活的方式实现数组排序。本文将从内置方法经典算法高级技巧三个维度展开,并附代码示例与性能对比,助你彻底掌握排序技术。

🔧 一、基础:内置 Array.prototype.sort()

JavaScript 的 sort() 是原地排序方法(直接修改原数组),默认按 Unicode 编码将元素转为字符串后排序。但通过自定义比较函数,可轻松实现复杂逻辑。

1. 数值排序

// 升序
const numbers = [1025];
numbers.sort((a, b) => a - b); // [2, 5, 10]

// 降序
numbers.sort((a, b) => b - a); // [10, 5, 2]

2. 字符串排序

// 忽略大小写
const fruits = ["Banana""apple""Cherry"];
fruits.sort((a, b) => a.localeCompare(b, 'en', { sensitivity'base' }));
// ["apple", "Banana", "Cherry"]

3. 对象数组排序

按对象属性排序是常见需求:

const users = [
  { name"Alice"age30 },
  { name"Bob"age25 }
];
users.sort((a, b) => a.age - b.age); // 按年龄升序

⚙️ 二、经典排序算法实现

虽然 sort() 足够强大,但理解底层算法有助于优化性能。以下是三种常用手写排序算法:

1. 冒泡排序

时间复杂度:O(n²)
适用场景:小型数组或教学演示

function bubbleSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 交换相邻元素
      }
    }
  }
  return arr;
}

2. 快速排序

时间复杂度:平均 O(n log n)
适用场景:大数据量、高性能需求

function quickSort(arr) {
  if (arr.length <= 1return arr;
  const pivot = arr[Math.floor(arr.length / 2)];
  const left = arr.filter(x => x < pivot);
  const right = arr.filter(x => x > pivot);
  return [...quickSort(left), pivot, ...quickSort(right)];
}

3. 插入排序

时间复杂度:O(n²)
适用场景:近乎有序的小数组

function insertionSort(arr) {
  for (let i = 1; i < arr.length; i++) {
    const current = arr[i];
    let j = i - 1;
    while (j >= 0 && arr[j] > current) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = current;
  }
  return arr;
}

🚀 三、高级排序技巧

1. 多字段排序

当主排序字段相同时,按次字段排序:

const employees = [
  { name"Alice"age30role"Developer" },
  { name"Bob"age30role"Designer" }
];

employees.sort((a, b) => {
  // 先按年龄升序,年龄相同按角色字母排序
  return a.age - b.age || a.role.localeCompare(b.role);
});

2. 稳定排序的重要性

ES2019 后 sort() 是稳定排序,即相同键值的元素保持原始顺序:

const items = [
  { id1type'fruit' },
  { id2type'vegetable' },
  { id3type'fruit' }
];
// 按 type 排序后,id=1 和 id=3 的 "fruit" 相对顺序不变

3. 洗牌算法(随机排序)

使用 Fisher-Yates 算法高效打乱数组:

function shuffle(arr) {
  for (let i = arr.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [arr[i], arr[j]] = [arr[j], arr[i]];
  }
  return arr;
}

4. 性能优化:映射排序(大数组)

对复杂对象数组,可先映射关键值再排序,减少计算:

const products = [
  { name"Laptop"price1200 },
  { name"Phone"price800 }
];

// 1. 创建价格映射
const priceMap = new Map(products.map(p => [p, p.price]));
// 2. 排序
products.sort((a, b) => priceMap.get(a) - priceMap.get(b));

📊 四、排序方法性能对比

方法
时间复杂度
适用场景
稳定性
sort()
各引擎优化(如快排)
通用场景
冒泡排序
O(n²)
教学/小数组
快速排序
O(n log n) 平均
大数据量
不稳定
插入排序
O(n²)
近乎有序的小数组

💡 建议

  • 90% 场景使用内置 sort() + 自定义比较函数即可。
  • 大数组(>10k 元素)优先选择分治类算法(如快速排序)。
  • 对稳定性有要求时(如表格多级排序),确认环境支持 ES2019+。

💎 总结

JavaScript 排序既灵活又强大:

  • 基础
    掌握 sort() 的比较函数写法,解决数值、字符串、对象排序问题。
  • 进阶
    理解经典算法原理,根据场景选择最优解。
  • 高阶
    多字段排序、洗牌算法、性能优化提升实战能力。

優網科技,優秀企業首選的互聯網供應服務商

優網科技秉承"專業團隊、品質服務" 的經營理念,誠信務實的服務了近萬家客戶,成為眾多世界500強、集團和上市公司的長期合作伙伴!

優網科技成立于2001年,擅長網站建設、網站與各類業務系統深度整合,致力于提供完善的企業互聯網解決方案。優網科技提供PC端網站建設(品牌展示型、官方門戶型、營銷商務型、電子商務型、信息門戶型、微信小程序定制開發、移動端應用(手機站APP開發)、微信定制開發(微信官網、微信商城、企業微信)等一系列互聯網應用服務。


我要投稿

姓名

文章鏈接

提交即表示你已閱讀并同意《個人信息保護聲明》

專屬顧問 專屬顧問
掃碼咨詢您的優網專屬顧問!
專屬顧問
馬上咨詢
聯系專屬顧問
聯系專屬顧問
聯系專屬顧問
掃一掃馬上咨詢
掃一掃馬上咨詢

掃一掃馬上咨詢

和我們在線交談!
主站蜘蛛池模板: 麻豆精品传媒成人精品| av在线免费福利导航| 大波美女一区二区三区| 亚洲黄一区二区三区在线 | 不卡免费成人日韩精品| 懂色av色av蜜臀av网站| 一区二区中文字幕在线视频| 国产成人精品欧美一区二区| 成年人性生活视频网站| 韩国一区二区三区韩国av| 91丝袜美女在线观看| 日本熟妇网站大全视频| 亚洲丝袜在线视频观看| av中文字幕日韩在线| 日本福利视频在线播放| 视频1区视频2区视频3区| 91熟女乱色一区二区三区| 欧洲一区二区大片在线播放| 国产av精品一区二区三区免费视频 | 亚洲伦理中文字幕一区二区| av日韩激情在线观看| 久久夜精品国产噜噜亚洲av高| 午夜在线免费观看av| 天天日天天干天天操天天插| 欧美一区二区国产一区| 一区二区中文字幕在线视频| 日本中文字幕在线视频资源网 | 色哟哟国产一区二区三区| 日韩欧美国产中文综合| 男女啪啪视频免费网站| 亚洲国内日韩欧美在线| 在线观看欧美日韩欧美| 久久老熟女乱一区二区| 好看的中文字幕视频一区二区三区 | 蜜臀av国产一区二区| 国产精品一区二区高清不卡| 日本成人黄色动漫在线| 日本精品一级在线观看| 激情五月国产综合自拍| 亚洲色图自拍偷拍色图| 亚洲高清中文字幕乱码|