国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 JavaScript中精致的分類

JavaScript中精致的分類

Mar 08, 2025 am 12:40 AM

Sophisticated Sorting in JavaScript

JavaScript 的排序機制簡單易用,卻蘊含著強大的靈活功能。sort() 方法不僅能對數(shù)組進行字母或數(shù)字排序,還能根據(jù)自定義的條件邏輯進行任意排序。

核心要點:

  • JavaScript 的 sort() 函數(shù)是一個靈活的工具,可以以多種方式組織數(shù)組,包括根據(jù)條件邏輯定義的自定義排列。
  • sort() 函數(shù)通過比較每次操作中的兩個值(a 和 b)來工作。如果函數(shù)返回小于零,則 a 排在 b 之前;如果返回大于零,則 b 排在 a 之前;如果返回零,則 a 和 b 相對位置不變。
  • JavaScript 支持多維排序和多條件排序。在多維排序中,比較數(shù)組的內(nèi)部值;在多條件排序中,使用多個值作為獨立的條件。
  • JavaScript 也可以對對象數(shù)組進行排序。隨著比較變得越來越復(fù)雜,建議使用對象字面量數(shù)組而不是多維數(shù)組,因為這使得比較函數(shù)更容易理解。

sort() 函數(shù)的工作原理:

→ 如果你已經(jīng)了解基礎(chǔ)知識,可以跳過這一部分。

如果 sort() 方法不帶任何參數(shù),則數(shù)組將按字典順序(詞典順序,每個值都被視為字符串)進行排序:

var letters = ["R","O","F","L"];

letters.sort();

alert(letters);    // 輸出 ["F","L","O","R"]

否則,sort() 方法的參數(shù)是一個比較函數(shù),該函數(shù)根據(jù)其返回值定義排序行為。比較函數(shù)本身接受兩個參數(shù),通常稱為 a 和 b,它們表示每次操作中比較的兩個值。然后:

  1. 如果函數(shù)返回小于零,則將 a 排在 b 之前
  2. 如果函數(shù)返回大于零,則將 b 排在 a 之前
  3. 如果函數(shù)返回零,則 a 和 b 的相對位置不變

規(guī)范以一種令人困惑的方式定義了這些規(guī)則。JavaScript 規(guī)范將第一個排序條件稱為“將 b 排序到比 a 更低的索引”。但這實際上意味著“將 b 排在 a 的更低位置”,就數(shù)值索引而言,這是一個更高的索引,而不是更低的索引。它以非?;靵y的方式使用了“索引”一詞;我希望以上我對條件的表達方式更加清晰。

因此,使用比較函數(shù)的通常方法是執(zhí)行并返回一個簡單的計算,以產(chǎn)生所需的排序結(jié)果。例如,如果函數(shù)返回 (a - b),則將產(chǎn)生數(shù)值排序:

var numbers = [8,5];

numbers.sort(function(a, b) {
    return a - b;   
});

alert(numbers);    // 輸出 [5,8]

我們可以用值示例來解釋這一點:由于 a = 8 且 b = 5,則 (a - b) == 3;3 大于零,因此 b 將排在 a 之前,產(chǎn)生順序 [5,8]。

因此,可以通過反轉(zhuǎn)等式來產(chǎn)生反向數(shù)值順序:

var letters = ["R","O","F","L"];

letters.sort();

alert(letters);    // 輸出 ["F","L","O","R"]

我們還可以創(chuàng)建一個比較函數(shù)來生成字典排序,方法是定義三個比較來評估每一對字符串——在計算術(shù)語中,“a”小于“b”,因此我們可以直接比較字符串,然后返回三個排序值之一:

var numbers = [8,5];

numbers.sort(function(a, b) {
    return a - b;   
});

alert(numbers);    // 輸出 [5,8]

請注意,我們?nèi)绾晤A(yù)先將每個字符串轉(zhuǎn)換為小寫,這確保我們獲得不區(qū)分大小寫的排序(如果我們不這樣做,則大小寫字母將分別排序)。我們還將這些操作的結(jié)果分配給新的變量,因為某些瀏覽器不允許覆蓋參數(shù)。

(以下內(nèi)容與原文相同,此處省略重復(fù)部分,保持與原文一致性)

多維排序 多條件排序 對象數(shù)組排序 關(guān)于穩(wěn)定排序的說明

總結(jié):記住,排序比較函數(shù)沒有什么特別之處,它只是一個執(zhí)行操作并返回結(jié)果的普通函數(shù)。你可以加載外部數(shù)據(jù)、創(chuàng)建測試渲染元素或執(zhí)行任意數(shù)量的復(fù)雜操作。只要函數(shù)正確返回——小于零、大于零或零——那么在實現(xiàn)過程中就沒有具體的限制!

縮略圖來源:[Soren]

關(guān)于 JavaScript 高級排序的常見問題解答 (原文FAQ部分略,避免重復(fù))

以上是JavaScript中精致的分類的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用于不同的應(yīng)用場景。Java用于大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用于網(wǎng)頁開發(fā)。

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什么要將標簽放在的底部? 為什么要將標簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標元素,冒泡是從目標元素向上傳播到頂層。1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實現(xiàn);2.事件冒泡是默認行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯誤處理。了解這兩個階段有助于精確控制JavaScript響應(yīng)用戶操作的時機和方式。

JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應(yīng)用程序的有效載荷大小? 如何減少JavaScript應(yīng)用程序的有效載荷大??? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過React.lazy()或構(gòu)建工具將大bundle拆分為多個小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機制清除“死代碼”,確保引入的庫支持該特性;3.壓縮和合并資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合并文件并優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級庫如day.js、fetch

JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS Jul 02, 2025 am 01:28 AM

ES模塊和CommonJS的主要區(qū)別在于加載方式和使用場景。1.CommonJS是同步加載,適用于Node.js服務(wù)器端環(huán)境;2.ES模塊是異步加載,適用于瀏覽器等網(wǎng)絡(luò)環(huán)境;3.語法上,ES模塊使用import/export,且必須位于頂層作用域,而CommonJS使用require/module.exports,可在運行時動態(tài)調(diào)用;4.CommonJS廣泛用于舊版Node.js及依賴它的庫如Express,ES模塊則適用于現(xiàn)代前端框架和Node.jsv14 ;5.雖然可混合使用,但容易引發(fā)問題

See all articles