JavaScript Dizisi sıralaması ()

JavaScript Array sort () yöntemi, bir dizinin öğelerini sıralar.

sort()Yöntem, belirli bir artan veya azalan amacıyla belirli bir dizi elemanlarını sıralar.

sort()Yöntemin sözdizimi şöyledir:

 arr.sort(compareFunction)

Burada dizi bir dizidir.

sort () Parametreler

sort()Yöntem alır:

  • CompareFunction (isteğe bağlı) - Özel bir sıralama düzeni tanımlamak için kullanılır.

Sort () değerinden dönüş değeri

  • Dizinin öğelerini yerinde sıraladıktan sonra diziyi döndürür (yani orijinal diziyi değiştirir ve kopya yapılmaz).

Örnek 1: Bir Dizinin Öğelerini Sıralama

CompareFunction geçilmediğinde,

  • undefinedDizi olmayan tüm elemanlar önce dizelere dönüştürülür.
  • Bu dizeler daha sonra UTF-16 kod noktası değerleri kullanılarak karşılaştırılır.
  • Sıralama artan sırada yapılır.
  • Tüm undefinedöğeler dizinin sonuna kadar sıralanır.
 // sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)

Çıktı

 ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50 , 7)

Burada, names dizisinin dizgeye göre artan sırada sıralandığını görebiliriz. Örneğin, Adam Danil'den önce gelir çünkü "A" "D" den önce gelir.

Tanımlanmamış tüm öğeler, sıralamadan önce dizelere dönüştürüldüğünden, Numberveri türleri bu sıraya göre sıralanır.

Burada 1000 sayısal olarak 50'den büyük olmasına rağmen sıralanan listenin başında geldiğini görebiliriz. Çünkü "1" <"5" .

Örnek 2: Özel İşlevi kullanarak Sıralama

CompareFunction geçildiğinde,

  • undefinedDizi olmayan tüm öğeler, CompareFunction işlevinin dönüş değerine göre sıralanır.
  • Tanımsız tüm öğeler dizinin sonuna kadar sıralanır ve bunun için CompareFunction çağrılmaz.

Yukarıdaki isimler dizisini, alfabetik olarak sıralamak yerine en uzun isim en son gelecek şekilde sıralamak istediğimizi varsayalım. Bunu şu şekilde yapabiliriz:

 // custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);

Çıktı

 ('Ben', 'Adam', 'Danil', 'Jeffrey', 'Fabiano')

Burada sıralama mantığa dayanmaktadır a.length - b.length. Temel olarak, uzunluğu daha kısa olan öğenin Array.

Önce isteğe bağlı seçeneğin nasıl compareFunctionçalıştığını anlayalım.

Herhangi compareFunctionbiri aşağıdaki sözdizimine sahiptir:

 function (a, b)( // sorting logic // return a Number )

sort()Yöntem, bir seferde iki değeri geçen dizinin tüm değerleri karşılaştırır compareFunction. İki parametre a ve b sırasıyla bu iki değeri temsil eder.

compareFunctionBir dönmelidir Number. Bu döndürülen değer, öğeleri aşağıdaki şekilde sıralamak için kullanılır:

  • Eğer değer <0 döndürülür , bir (a, b önce gelir b) önce sıralanır.
  • Eğer değer> 0 döner bir (a, b önce gelir) önce, b sıralanır.
  • Eğer geri değer == 0 , a ve b her biri diğerine göre değişmeden kalır.

Örnek 2'de, diziyi şu şekilde sıralıyoruz:

 function len_compare(a, b)( return a.length - b.length; )

Buraya:

  • Eğer a.length - b.length <0 , bir b önce gelir. Örneğin, "Adam" 4 - 7 <0 olarak "Jeffrey" den önce gelir .
  • Eğer a.length - b.length> 0 ise , b, a'dan önce gelir. Örneğin, "Danil" "Ben" den sonra 5 - 3> 0 olarak gelir.
  • Eğer a.length - b.length == 0 , konumları değişmez. Örneğin, "Jeffrey" ve "Fabiano" nun göreli konumu değişmez çünkü 7 - 7 == 0 .

Bunun, uzunluklarına göre artan düzende dizelerin sıralanmasıyla sonuçlandığını görebiliriz.

Örnek 3: Numaraları Sayısal Olarak Sıralama

Tanımlanmamış tüm öğeler, sıralanmadan önce dizelere dönüştürüldüğünden, varsayılan olarak sayıları sayısal değerlerini kullanarak sıralayamayız.

Bunu özel bir işlev kullanarak nasıl uygulayabileceğimize bakalım.

 // numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);

Çıktı

 Artan - 2,7,14,50,1000 Azalan - 1000,50,14,7,2

Bu örnekte, diziyi şu şekilde sıraladık:

 function (a, b) ( return a - b; )

Buraya,

  • Eğer bir - b <0 , bir b önce gelir. Örneğin, 2, 7'den önce 2-7 <0 olarak gelir .
  • Eğer a - b> 0 , b önce gelir. Örneğin 1000, 50'den sonra 1000 - 50> 0 olarak gelir .

Bunun, sayıların artan sayısal değerlerine göre sıralanmasıyla sonuçlandığını görebiliriz.

Benzer şekilde, b - aonları azalan sırada sıralamak için kullanabiliriz . ES2015'te tanımlanan ok işlevi ifadesini de kullanabileceğimizi unutmayın.

Yerleşik dizi reverse()yöntemini kullanarak sıralanan diziyi tersine çevirebiliriz (azalan sıra) . Daha fazla bilgi edinmek için JavaScript Array reverse () sayfasını ziyaret edin.

Ilginç makaleler...