欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS數(shù)組中sort的用法(避坑版)

 更新時(shí)間:2025年06月05日 10:00:36   作者:shifff  
本文主要介紹了JS數(shù)組中sort的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 JavaScript 中,Array.prototype.sort() 方法用于對數(shù)組的元素進(jìn)行排序,但它的默認(rèn)行為可能和直覺不一致。以下是完整的用法解析和注意事項(xiàng):

一、基本用法

1. 默認(rèn)排序(?? 有坑)

默認(rèn)按 Unicode 編碼 進(jìn)行字符串排序:

const arr = [10, 2, 1, 20];
arr.sort();
console.log(arr); // [1, 10, 2, 20] ? 不是數(shù)值大小排序!

2. 自定義比較函數(shù)(? 推薦)

通過回調(diào)函數(shù)定義排序規(guī)則:

// 數(shù)字升序排序
arr.sort((a, b) => a - b); // [1, 2, 10, 20]

// 數(shù)字降序排序
arr.sort((a, b) => b - a); // [20, 10, 2, 1]

二、排序規(guī)則詳解

比較函數(shù)返回值解析:

function compare(a, b) {
  if (a < b) return -1; // a 排在 b 前面
  if (a > b) return 1;  // a 排在 b 后面
  return 0;             // 位置不變(ES6+ 后穩(wěn)定排序)
}

簡化寫法:

// 等價(jià)于上面的 compare 函數(shù)
arr.sort((a, b) => a - b); 

三、常見場景示例

1. 對象數(shù)組排序

const users = [
  { name: 'Bob', age: 25 },
  { name: 'Alice', age: 30 }
];

// 按 age 升序
users.sort((a, b) => a.age - b.age);

// 按 name 字母排序(區(qū)分大小寫)
users.sort((a, b) => a.name.localeCompare(b.name));

2. 多條件排序

const products = [
  { name: 'Laptop', price: 1000, rating: 4.5 },
  { name: 'Phone', price: 999, rating: 4.7 }
];

// 先按 rating 降序,再按 price 升序
products.sort((a, b) => {
  if (b.rating !== a.rating) return b.rating - a.rating;
  return a.price - b.price;
});

3. 字符串特殊排序

// 不區(qū)分大小寫排序
const letters = ['Apple', 'banana', 'Cherry'];
letters.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));

// 含中文的排序
const names = ['張三', '李四', '王五'];
names.sort((a, b) => a.localeCompare(b, 'zh-Hans-CN'));

四、注意事項(xiàng)

場景問題與解決方案
修改原數(shù)組sort 是原地排序,用 [...arr].sort() 可避免改變原數(shù)組
穩(wěn)定性ES2019 后 sort 穩(wěn)定(相同元素保持原有順序)
稀疏數(shù)組空位(empty)會被排序到數(shù)組末尾
非 ASCII 字符需用 localeCompare 正確處理國際化排序
無效比較函數(shù)函數(shù)未返回?cái)?shù)字會導(dǎo)致意外行為(如返回布爾值)

五、實(shí)用技巧

1. 隨機(jī)排序

// ?? 非嚴(yán)格均勻隨機(jī),適用于簡單場景
const arr = [1, 2, 3];
arr.sort(() => Math.random() - 0.5);

2. 按字符串長度排序

const words = ['apple', 'kiwi', 'banana'];
words.sort((a, b) => a.length - b.length); // ['kiwi', 'apple', 'banana']

3. 按日期排序

const dates = [
  '2023-10-01',
  '2023-09-15',
  '2023-12-25'
];
dates.sort((a, b) => new Date(a) - new Date(b));

六、性能對比

對 10,000 個數(shù)字 排序耗時(shí)測試(Chrome):

方法耗時(shí) (ms)說明
arr.sort()1.2默認(rèn)字符串排序 ?
arr.sort((a,b)=>a-b)0.8正確數(shù)值排序 ?
Lodash _.sortBy1.5功能更全但稍慢

到此這篇關(guān)于JS數(shù)組中sort的用法(避坑版)的文章就介紹到這了,更多相關(guān)JS sort用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論