Bagaimana cara mengurutkan array berdasarkan panjang setiap elemen?


96

Saya memiliki array seperti ini:

arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"

Setelah mengurutkan, larik keluaran harus:

arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"  

Maksud saya, saya ingin dalam urutan menurun dari panjang setiap elemen.


1
sortcukup lurus ke depan, di mana Anda mengalami kesulitan?
mu terlalu pendek

5
@muistooshort well default sort () mengurutkan string secara alfabetis, dia mencari string.length sorting seperti yang bisa dilihat pada jawaban yang dipilih :)
jave.web

Jawaban:


233

Anda dapat menggunakan Array.sortmetode untuk mengurutkan array. Fungsi pengurutan yang mempertimbangkan panjang string sebagai kriteria pengurutan dapat digunakan sebagai berikut:

arr.sort(function(a, b){
  // ASC  -> a.length - b.length
  // DESC -> b.length - a.length
  return b.length - a.length;
});

Catatan: mengurutkan ["a", "b", "c"]berdasarkan panjang string tidak dijamin akan kembali ["a", "b", "c"]. Menurut spesifikasinya :

Jenis tersebut belum tentu stabil (yaitu, elemen yang dibandingkan tidak selalu dalam urutan aslinya).

Jika tujuannya adalah untuk mengurutkan berdasarkan panjang maka berdasarkan urutan kamus Anda harus menentukan kriteria tambahan:

["c", "a", "b"].sort(function(a, b) {
  return a.length - b.length || // sort by length, if equal then
         a.localeCompare(b);    // sort by dictionary order
});

Saya akan menambahkan bahwa ini mengurutkan array dengan mengurangi panjang item.
davidhq

aha ada di komentar :) awalnya tidak melihatnya
davidhq

Hanya untuk menambahkan informasi. Cuplikan ini tidak akan berfungsi untuk semua kasus.
Arunkumar Srisailapathi

Cobalah untuk arr = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'k', 'l'], itu akan gagal
Arunkumar Srisailapathi

15
Cara ES6arr.sort((a, b) => b.length - a.length)
Fergal

4

Kita bisa menggunakan metode Array.sort untuk mengurutkan array ini.

Solusi ES5

var array = ["ab", "abcdefgh", "abcd"];

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

console.log(JSON.stringify(array, null, '\t'));

Untuk urutan naik :a.length - b.length

Untuk jenis urutan menurun :b.length - a.length

Solusi ES6

Perhatian: tidak semua browser dapat memahami kode ES6!

Di ES6 kita bisa menggunakan ekspresi fungsi panah .

let array = ["ab", "abcdefgh", "abcd"];

array.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(array, null, '\t'));



0

Berdasarkan jawaban Salman, saya telah menulis sebuah fungsi kecil untuk merangkumnya:

function sortArrayByLength(arr, ascYN) {
        arr.sort(function (a, b) {           // sort array by length of text
            if (ascYN) return a.length - b.length;              // ASC -> a - b
            else return b.length - a.length;                    // DESC -> b - a
        });
    }

kemudian sebut saja dengan

sortArrayByLength( myArray, true );

Perhatikan bahwa sayangnya, fungsi tidak dapat / tidak boleh ditambahkan ke prototipe Array, seperti yang dijelaskan di halaman ini .

Selain itu, ia memodifikasi array yang diteruskan sebagai parameter dan tidak mengembalikan apa pun. Ini akan memaksa duplikasi array dan tidak akan bagus untuk array besar. Jika seseorang memiliki ide yang lebih baik, tolong beri komentar!


0

Saya mengadaptasi jawaban @ shareef agar ringkas. Saya menggunakan,

.sort(function(arg1, arg2) { return arg1.length - arg2.length })


ini akan mengurutkan dari panjang rendah ke panjang yang lebih tinggi
Miguel

0
#created a sorting function to sort by length of elements of list
def sort_len(a):
    num = len(a)
    d = {}
    i = 0
    while i<num:
        d[i] = len(a[i])
        i += 1
    b = list(d.values())
    b.sort()
    c = []
    for i in b:
        for j in range(num):
            if j in list(d.keys()):
                if d[j] == i:
                    c.append(a[j])
                    d.pop(j)
    return c

1
Memposting kode saja tidak akan membantu. Berikan deskripsi singkat tentang fungsi kode Anda.
coderpc

-1

Kode ini harus melakukan trik:

var array = ["ab", "abcdefgh", "abcd"];

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

console.log(JSON.stringify(array, null, '\t'));

-3
<script>
         arr = []
         arr[0] = "ab"
         arr[1] = "abcdefgh"
         arr[2] = "sdfds"
         arr.sort(function(a,b){
            return a.length<b.length
         })
         document.write(arr)

</script>

Fungsi anonim yang Anda berikan untuk mengurutkan memberi tahu cara mengurutkan array yang diberikan. Semoga ini membantu. Saya tahu ini membingungkan tetapi Anda dapat memberi tahu fungsi sortir cara mengurutkan elemen array dengan meneruskan fungsi sebagai parameter yang memberi tahu itu apa yang harus dilakukan


5
Apa fungsi perbandingan pengurutan yang seharusnya dikembalikan? Berikut petunjuknya: ini bukan boolean.
mu terlalu pendek
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.