Nie używam tablicy asocjacyjnej. Używam tablicy 1d w ten sposób,Jak sortować tablicę w JavaScript
array("1,a","5,b","2,c","8,d","6,f");
Jak mogę posortować tę tablicę?
Wynik powinien być
array("1,a","2,c","5,b","6,f","8,d");
Nie używam tablicy asocjacyjnej. Używam tablicy 1d w ten sposób,Jak sortować tablicę w JavaScript
array("1,a","5,b","2,c","8,d","6,f");
Jak mogę posortować tę tablicę?
Wynik powinien być
array("1,a","2,c","5,b","6,f","8,d");
Zamierzam śmiało zakładać, że chcesz, aby posortować według części numerem pierwszym, sortowanie numerycznie, a następnie mają lexographic wtórnego (string) porządek na bit po przecinku. W ten sposób wartość "11, a" skończy się po "2, a" - jeśli po prostu zrobisz sortowanie domyślne "11, a" zakończy się przed "2, a". Więc:
var a = ["1,a","11,a","8,a","24,z","5,b","2,c","8,d","6,f"];
a.sort(function(a,b) {
var aparts = a.split(","),
bparts = b.split(","),
anum = +aparts[0], // convert first part to number
bnum = +bparts[0],
aletter = aparts[1],
bletter = bparts[1];
if (anum === bnum)
return aletter < bletter ? -1 : aletter === bletter ? 0 : -1;
else
return anum - bnum;
});
Wynik:
["1,a", "2,c", "5,b", "6,f", "8,a", "8,d", "11,a", "24,z"]
Świetnie. Miałem podobne pblm. Zauważyłem to właśnie teraz. jeśli drugi element jest podobny, to nie sortuje się prawidłowo. Twój kod pomógł mi. Dużo dzięki, – Anish
@Anish, Alex radzi sobie z tym dużo bardziej elegancko ... http://stackoverflow.com/a/8652418/555384 – jondavidjohn
@jondavidjohn - to może być bardziej eleganckie, ale nie jest równoważne, ponieważ nie zawiera sortowanie wtórne w części alfa. – nnnnnn
array.sort()
Zastosowanie wbudowanej funkcji JS. Dokumentacja tutaj: http://www.w3schools.com/jsref/jsref_sort.asp
array.sort nie posortuje powyższych jeden poprawnie – Anish
+1, ale chcę poprzeć MDN (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort) nad W3Schools. Zobacz, dlaczego http://w3fools.com/ –
@Anish Tak, tak. Zobacz mój działający przykładowy kod ... http://jsfiddle.net/Dht33/ – jondavidjohn
var arrayVar = ["1,a","2,c","5,b","6,f","8,d"];
arrayVar.sort()
arrayVar; // "1,a","2,c","5,b","6,f","8,d"
tak ... działa ... – Anish
spróbuj:
function sortNumber(a,b)
{
return (a.split(","))[0] - (b.split(","))[0] ;
}
var n = ["1,a","5,b","2,c","8,d","6,f"];
alert(n.sort(sortNumber));
Nie. To nie sortuje – Anish
Przepraszam - mój błąd - poprawiłem kod - teraz działa –
sort()
bez niestandardowej funkcji sortowania będzie go rozwiązać jak chcesz (leksykograficznie).
>>> ["1,a","5,b","2,c","8,d","6,f"].sort();
["1,a", "2,c", "5,b", "6,f", "8,d"]
Należy zauważyć, że spowoduje to posortowanie oryginalnej tablicy. Możesz zrobić płytką kopię z slice()
.
Jeśli którykolwiek z twoich numerów jest większy niż 9
i chcesz posortować go za pomocą liczby porządkowej, będziesz potrzebować niestandardowej funkcji sortowania.
["1,a","5,b","2,c","8,d","6,f"].sort(function(a, b) {
return parseInt(a, 10) - parseInt(b, 10);
});
Dziękuję za odpowiedź. Kod jondavidjohn działa dla mnie. – Anish
Oto, co zrobić:
var arr1 = new Array("1,a","5,b","2,c","8,d","6,f");
var arr2 = arr1.sort(function(a, b){
var ax = a.split(",");
var bx = b.split(",");
return ax[0]-bx[0];
});
document.getElementById("result").innerHTML = arr2.join(" : ");
Musisz napisać własną funkcję porównywania porównywania liczb, poza domyślnym sort()
byłoby umieścić coś takiego "40,a"
przed "5,b"
.
Oto przykład, który dzieli się po prostu na znak ,
i przyjmuje wartość przed wartością liczbową. Dodałem "40,a"
do przykładu, aby pokazać, że poprawnie zamawia numery> 9.
function mySort(a,b)
{
return a.split(",", 1) - b.split(",", 1);
}
var theArray = ["1,a", "5,b", "2,c", "40,a", "8,d", "6,f"];
theArray.sort(mySort); // "1,a","2,c","5,b","6,f","8,d","40,a"
Dziękuję za odpowiedź. Domyślnie sort() zrobił dla mnie pracę. – Anish
Spróbuj tego:
<script type="text/javascript">
var testArray = new Array();
testArray[0] = '1';
testArray[1] = '5';
testArray[2] = '9';
testArray[3] = '8';
testArray[4] = '6';
testArray[5] = '2';
var getlength = testArray.length;
testArray.sort(function(a,b){return a - b});
for(var i=0; i<getlength;i++) {
alert(testArray[i]);
}
</script>
Spróbuj
<script>
var abc=new Array("1,a","5,b","2,c","8,d","6,f");
document.write("<br/>");
document.write(abc.sort());
</script>
Jaki problem należy rozwiązać z [ '.sort()'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort)? Czy pomysł polega na sortowaniu numerycznym według numeru, z sortowaniem wtórnym według następującej litery? Lub po prostu zrobić standardowe sortowanie ciągów na cały tekst? To jest, jak chcesz sortować '[" 1, a "," 11, a "," 2, b "," 2, c "]' – nnnnnn
sort() działa. Pomyliłem się w moim kod. – Anish
możliwy duplikat [naturalnego rodzaju tekstu i liczb, JavaScript] (http://stackoverflow.com/questions/2802341/natural-sort-text-and-numbers-javascript) – outis