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

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

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

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

一、基本用法

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)定排序)
}

簡化寫法:

// 等價于上面的 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'));

四、注意事項

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

五、實用技巧

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ù)字 排序耗時測試(Chrome):

方法耗時 (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)文章

  • javascript中$(function() {});寫與不寫有哪些區(qū)別

    javascript中$(function() {});寫與不寫有哪些區(qū)別

    javascript中$(function() {....}) 是jQuery中的經(jīng)典用法,等同于 $(document).ready(function() {....}) javascript中$(function() {});寫與不寫有哪些區(qū)別,需要的朋友可以參考下
    2015-08-08
  • TypeScript判斷兩個數(shù)組的內(nèi)容是否相等的實現(xiàn)

    TypeScript判斷兩個數(shù)組的內(nèi)容是否相等的實現(xiàn)

    本文主要介紹了TypeScript?判斷兩個數(shù)組的內(nèi)容是否相等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • javascript用函數(shù)實現(xiàn)對象的方法

    javascript用函數(shù)實現(xiàn)對象的方法

    這篇文章主要介紹了javascript用函數(shù)實現(xiàn)對象的方法,涉及javascript函數(shù)使用技巧,需要的朋友可以參考下
    2015-05-05
  • 如何解決webpack-dev-server代理常切換問題

    如何解決webpack-dev-server代理常切換問題

    通常我們有一份webpack.dev.config.js使用webpack-dev-server的proxy,代理到開發(fā)服務(wù)器,來解決本地跨域問題。假如項目變大,可能需要proxy到不同環(huán)境,那么如何解決webpack-dev-server代理常切換問題,下面就一起來了解一下
    2019-01-01
  • JavaScript中的類(Class)詳細(xì)介紹

    JavaScript中的類(Class)詳細(xì)介紹

    這篇文章主要介紹了JavaScript中的類(Class)詳細(xì)介紹,本文講解了JavaScript中類的定義、JavaScript中的Constructor(構(gòu)造函數(shù))、類名等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • IE FF OPERA都可用的彈出層實現(xiàn)代碼

    IE FF OPERA都可用的彈出層實現(xiàn)代碼

    多瀏覽器的彈出層效果核心代碼。需要的朋友可以測試下這個是從正在使用的網(wǎng)站中扒下來的。
    2009-09-09
  • JavaScript箭頭函數(shù)_動力節(jié)點Java學(xué)院整理

    JavaScript箭頭函數(shù)_動力節(jié)點Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了JavaScript箭頭函數(shù)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • javascript中節(jié)點的最近的相關(guān)節(jié)點訪問方法

    javascript中節(jié)點的最近的相關(guān)節(jié)點訪問方法

    parentNode——父節(jié)點;firstChild——第一個子節(jié)點;lastChild——最后一個子節(jié)點;previousSibling——緊挨著的前面的兄弟節(jié)點;這樣就可以作短途旅行,訪問當(dāng)前節(jié)點的某些相關(guān)節(jié)點,感興趣的你可以參考下哈
    2013-03-03
  • three.js實現(xiàn)圍繞某物體旋轉(zhuǎn)

    three.js實現(xiàn)圍繞某物體旋轉(zhuǎn)

    本篇文章主要介紹了three.js實現(xiàn)圍繞某物體旋轉(zhuǎn)的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 原生JavaScript實現(xiàn)瀑布流布局

    原生JavaScript實現(xiàn)瀑布流布局

    這篇文章主要介紹了原生JavaScript實現(xiàn)瀑布流布局的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-12-12

最新評論