Array.prototype.sort ()

Saralash ()usuli bir qator ma'lumotlar paytda joyda va tartib bir qator qaytaradi. Standart tartiblash elementlarni satrlarga aylantirish, so'ngra UTF-16 kod birliklari qiymatlari ketma-ketligini solishtirish asosida tuzilgan.

Vaqt va makonning murakkabligi kafolatlanmaydi, chunki bu amalga oshirishga bog'liq.

Sintaksis

Parametrlar

Qaytish qiymati

Saralangan massiv. Array tartiblashtiriladi unutmang joyda , va hech nusxasi amalga oshiriladi.

Tavsif

Agar solishtirish funktsiyasi berilmagan bo'lsa, undagi aniqlanmagan barcha elementlar ularni satrlarga aylantirish va UTF-16 kod birliklari tartibidagi satrlarni solishtirish orqali saralanadi. Masalan, "banan" "gilos" dan oldin keladi. Raqamli tartibda 9 80dan oldin keladi, lekin raqamlar satrlarga aylantirilganligi uchun "80" Unicode tartibida "9" dan oldin keladi. Barcha aniqlanmagan elementlar qator oxirigacha tartiblangan.

Eslatma:UTF -16da \ uFFFF ustidagi Unicode belgilar \ uD800 - \ uDFFF oralig'idagi ikkita surrogat kod birligi sifatida kodlangan. Taqqoslash uchun har bir kod birligining qiymati alohida hisobga olinadi. \ UD655 \ uDE55 surrogat juftligi hosil qilgan belgi \ uFF3A belgisidan oldin tartiblanadi.

Agar solishtirish funktsiyasi taqdim etilsa, barcha aniqlanmagan qator elementlari taqqoslash funktsiyasining qaytish qiymatiga ko'ra tartiblanadi (aniqlanmagan barcha elementlar qator oxirigacha tartiblanadi, solishtirish funktsiyasiga qo'ng'iroq qilinmaydi). Agar a va b taqqoslanadigan ikkita element bo'lsa, unda:

  • Agar solishtirishFunktsiyasi (a, b) 0 dan ortiq qiymatni qaytarsa, b dan oldin a tartiblang.
  • Agar solishtirishFunction (a, b) ≤ 0 qiymatini qaytarsa, a va b ni bir xil tartibda qoldiring.

Eslatma:ECMAScript Standard, 10 -nashr (2019) algoritmi barqaror tartiblashni talab qiladi, ya'ni teng taqqoslaydigan elementlar bir -biriga nisbatan asl tartibida qolishi kerak. Bu xatti -harakatlar eski brauzerlar tomonidan hurmat qilinmasligi mumkin.

Shunday qilib, solishtirish funktsiyasi quyidagi shaklga ega:

Satrlar o'rniga raqamlarni solishtirish uchun solishtirish funktsiyasi b dan a ni olib tashlashi mumkin. Quyidagi funksiya massivni o'sish tartibida saralaydi (agar u Infinity va NaNni o'z ichiga olmasa):

Saralash usuli funktsiya ifodalari bilan qulay ishlatilishi mumkin:

ES2015 o'q funktsiyalari ifodalarini yanada qisqa sintaksis bilan ta'minlaydi.

Ob'ektlar massivlarini ularning xususiyatlaridan birining qiymatini solishtirish orqali saralash mumkin.

Misollar

Massivni yaratish, ko'rsatish va saralash

Quyidagi misol to'rtta massivni yaratadi va asl qatorni, so'ngra tartiblangan massivlarni ko'rsatadi. Raqamli massivlar taqqoslash funktsiyasiz saralanadi, so'ngra biri yordamida saralanadi.

ASCII bo'lmagan belgilarni saralash

ASCII bo'lmagan belgilar bilan satrlarni saralash uchun, ya'ni aksent belgilar (e, é, è, a, ä va h.k.), ingliz tilidan boshqa tillardagi satrlarni saralash uchun String.localeCompare dan foydalaning. Bu funktsiya bu belgilarni taqqoslashi mumkin, shuning uchun ular to'g'ri tartibda ko'rinadi.

Xarita bo'yicha saralash

Solishtirish funktsiyasini qator ichidagi har bir element uchun bir necha marta chaqirish mumkin. Solishtirish funktsiyasining xususiyatiga qarab, bu yuqori xarajatlarni keltirib chiqarishi mumkin. A solishtirish funktsiyasi qanchalik ko'p ish qilsa va saralash uchun qancha element bo'lsa, saralash uchun xaritadan foydalanish samaraliroq bo'lishi mumkin. Vaqtinchalik massivga saralash uchun ishlatilgan haqiqiy qiymatlarni chiqarish uchun vaqtinchalik massivni bir marta aylantirish, keyin to'g'ri tartibga erishish uchun vaqtinchalik qatorni aylantirish.

Bu yondashuvni qo'llaydigan mapsort deb nomlangan ochiq manbali kutubxona mavjud.

Turg'unlikni saralash

10 -versiyadan (yoki EcmaScript 2019) boshlab, spetsifikatsiya Array.prototype.sort barqarorligini belgilaydi.

Masalan, sizda baholar bilan bir qatorda talabalar ro'yxati bor edi. E'tibor bering, talabalar ro'yxati allaqachon alifbo tartibida nomi bo'yicha saralangan:

Bu qatorni sinflar bo'yicha o'sish tartibida saralashdan so'ng:

Keyin talabalar o'zgaruvchisi quyidagi qiymatga ega bo'ladi:

Shuni ta'kidlash kerakki, bir xil bahoga ega bo'lgan talabalar (masalan, Aleks va Devlin), saralashni chaqirishdan avvalgi tartibda qoladi. Bu barqaror saralash algoritmi kafolatlaydi.

10 -versiyadan oldin (yoki EcmaScript 2019), tartib barqarorligi kafolatlanmagan, ya'ni siz quyidagilarga duch kelishingiz mumkin: