मुख्य सामग्री पर जाएं
मॉड्यूल 6 · पाठ 4 का 4पाठ्यक्रम में 24/32~12 min
मॉड्यूल पाठ (4/4)

क्रमबद्ध करें

जावास्क्रिप्ट में किसी सरणी को सॉर्ट करना एक बड़ा जाल है: sort() मूल सरणी को बदल देता है और डिफ़ॉल्ट रूप से स्ट्रिंग के रूप में सॉर्ट होता है।

जाल

JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20]   ← !? sorted as strings: "1" < "10" < "2"

संख्यात्मक छँटाई के लिए आपको एक तुलनित्र (a, b) => number पास करना होगा:

  • a - b < 0 → a पहले आता है
  • a - b > 0 → b पहले आता है
  • a - b === 0 → क्रम अपरिवर्तित
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20]    ← ascending order

nums.sort((a, b) => b - a);
// [20, 10, 2, 1]    ← descending

फ़ील्ड के अनुसार वस्तुओं को क्रमबद्ध करना

JS
const utenti = [
  { nome: 'Anna', eta: 30 },
  { nome: 'Luca', eta: 12 },
  { nome: 'Sara', eta: 18 },
];

utenti.sort((a, b) => a.eta - b.eta);
// [{Luca,12}, {Sara,18}, {Anna,30}]

स्ट्रिंग्स के लिए आप उनकी तुलना localeCompare से कर सकते हैं:

JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']

मूल को परिवर्तित नहीं किया जा रहा है

दो विकल्प:

JS
// 1) copy + sort
const copia = [...nums].sort((a, b) => a - b);

// 2) toSorted (modern, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);

इसे अजमाएं

व्यायाम#js.m6.l4.e1
प्रयास: 0लोड हो रहा है...

`sortAscending(nums)` को परिभाषित करें: संख्याओं के रूप में आरोही क्रम में क्रमबद्ध, सरणी की एक नई प्रतिलिपि लौटाएँ। मूल नहीं बदलना चाहिए.

संपादक लोड हो रहा है...
संकेत दिखाएँ

[...अंक].सॉर्ट((ए, बी) => ए - बी)

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#js.m6.l4.e2
प्रयास: 0लोड हो रहा है...

`sortByAgeAscending(people)` को परिभाषित करें: {नाम, उम्र } की एक सरणी दी गई है, बढ़ती उम्र के अनुसार क्रमबद्ध एक नई प्रति लौटाएं। मूल नहीं बदलना चाहिए.

संपादक लोड हो रहा है...
संकेत दिखाएँ

[...लोग].सॉर्ट((ए, बी) => ए.उम्र - बी.उम्र)

3 प्रयासों के बाद समाधान उपलब्ध है