Sobes.tech
Junior

Ինչպե՞ս կվերցնեիք թվերի զանգվածը դասավորելու համար։

sobes.tech AI

Պատասխան AI-ից

// Օգտագործում ենք sort() մեթոդը համեմատական ֆունկցիայով
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // Աճող դասավորություն

// Կարգավորումը նվազող համար:
// numbers.sort((a, b) => b - a);

JavaScript-ում sort() մեթոդը տեղում դասավորում է զանգվածի տարրերը։ Դրա նախնական տարբերակում, այն փոխակերպում է տարրերը տողերի և դասավորում է նրանց լեքսիկոգրաֆիկորեն։ Ճիշտ թվային դասավորության համար անհրաժեշտ է փոխանցել համեմատական ֆունկցիա։

Համեմատական ֆունկցիան ընդունում է երկու արգումենտ, a և b։

  • Եթե ֆունկցիան վերադարձնի բացասական թիվ, a կլինի b-ից առաջ։
  • Եթե վերադարձնի դրական թիվ, b-ն կլինի a-ից առաջ։
  • Եթե վերադարձնի 0, տարրերի կարգը չի փոխվի։

Թվային տարրերը դասավորելու համար աճող կարգով օգտագործվում է (a, b) => a - b։ Եթե a փոքր է, քան b, արդյունքը բացասական է և a-ն առաջ է գալիս։ Նվազող կարգով օգտագործվում է (a, b) => b - a։ Եթե b-ն փոքր է, քան a, արդյունքը դրական է և b-ն առաջ է գալիս։

Այլ մեթոդներ (քիչ օգտագործվող պարզ թվային զանգվածների համար, բայց օգտակար).

  • localeCompare() մեթոդը թվային տողերի համար:

    // Չի խորհուրդ տրվում մաքուր թվերի համար, բայց կարող է օգտագործվել
    // եթե թվերը ներկայացված են որպես տողեր և անհրաժեշտ է հաշվի առնել տեղականը։
    const stringNumbers = ["10", "2", "1"];
    stringNumbers.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
    // Կարգավորել որպես [ "1", "2", "10" ]
    
  • Կապի զանգվածի պատճենը նախքան դասավորելը:

    // Եթե ցանկանում եք պահպանել սկզբնական զանգվածը
    const originalNumbers = [4, 2, 5, 1, 3];
    const sortedNumbers = [...originalNumbers].sort((a, b) => a - b);
    // կամ
    // const sortedNumbers = originalNumbers.slice().sort((a, b) => a - b);