Mam taką tablicę:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
Po posortowaniu tablica wyjściowa powinna wyglądać następująco:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Mam na myśli, chcę w porządku malejącym długości każdego elementu.
javascript
arrays
string
sorting
ramesh kumar
źródło
źródło
sort
jest dość prosta, gdzie masz trudności?Odpowiedzi:
Możesz użyć
Array.sort
metody do sortowania tablicy. Funkcja sortowania, która traktuje długość ciągu jako kryterium sortowania, może być używana w następujący sposób:arr.sort(function(a, b){ // ASC -> a.length - b.length // DESC -> b.length - a.length return b.length - a.length; });
Uwaga: sortowanie
["a", "b", "c"]
według długości łańcucha nie gwarantuje zwrotu["a", "b", "c"]
. Zgodnie ze specyfikacją :Jeśli celem jest sortowanie według długości, to według kolejności słownikowej należy określić dodatkowe kryteria:
["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 });
źródło
arr.sort((a, b) => b.length - a.length)
Do sortowania tej tablicy możemy użyć metody Array.sort .
Rozwiązanie ES5
var array = ["ab", "abcdefgh", "abcd"]; array.sort(function(a, b){return b.length - a.length}); console.log(JSON.stringify(array, null, '\t'));
Rozwiązanie ES6
Uwaga: nie wszystkie przeglądarki mogą zrozumieć kod ES6!
W ES6 możemy użyć wyrażeń funkcyjnych strzałek .
let array = ["ab", "abcdefgh", "abcd"]; array.sort((a, b) => b.length - a.length); console.log(JSON.stringify(array, null, '\t'));
źródło
Oto sortowanie, w zależności od długości łańcucha z javascript, zgodnie z pytaniem:
[rozwiązanie problemu przez sortowanie bąbelkowe] [1]
[1]: http://jsfiddle.net/sssonline2/vcme3/2/
enter code here
źródło
Opierając się na odpowiedzi Salmana, napisałem małą funkcję, aby ją zamknąć:
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 }); }
potem po prostu zadzwoń
sortArrayByLength( myArray, true );
Zauważ, że niestety funkcje nie mogą / nie powinny być dodawane do prototypu Array, jak wyjaśniono na tej stronie .
Ponadto zmodyfikował tablicę przekazaną jako parametr i nic nie zwraca. Wymusiłoby to powielenie tablicy i nie byłoby świetne w przypadku dużych tablic. Jeśli ktoś ma lepszy pomysł, proszę o komentarz!
źródło
Dostosowałem odpowiedź @ shareef, aby była zwięzła. Używam,
.sort(function(arg1, arg2) { return arg1.length - arg2.length })
źródło
#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
źródło
Jeśli chcesz zachować kolejność elementów o takiej samej długości jak oryginalna tablica, użyj sortowania bąbelkowego.
Input = ["ab","cdc","abcd","de"]; Output = ["ab","cd","cdc","abcd"]
Funkcjonować:
function bubbleSort(strArray){ const arrayLength = Object.keys(strArray).length; var swapp; var newLen = arrayLength-1; var sortedStrArrByLenght=strArray; do { swapp = false; for (var i=0; i < newLen; i++) { if (sortedStrArrByLenght[i].length > sortedStrArrByLenght[i+1].length) { var temp = sortedStrArrByLenght[i]; sortedStrArrByLenght[i] = sortedStrArrByLenght[i+1]; sortedStrArrByLenght[i+1] = temp; swapp = true; } } newLen--; } while (swap); return sortedStrArrByLenght; }
źródło
Ten kod powinien załatwić sprawę:
var array = ["ab", "abcdefgh", "abcd"]; array.sort(function(a, b){return b.length - a.length}); console.log(JSON.stringify(array, null, '\t'));
źródło
<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>
Funkcja anonimowa, którą przekazujesz do sortowania, mówi mu, jak posortować podaną tablicę. Mam nadzieję, że to pomoże Wiem, że jest to mylące, ale możesz powiedzieć funkcji sortowania, jak sortować elementy tablicy, przekazując jej funkcję jako parametr informujący co robić
źródło