JavaScript Сортиране на масив

What

Registered
Така сортирам масива си от A-Z и обратно
Код:
array.sort(function(a,b){
            var x = a.toLowerCase();
            var y = b.toLowerCase();

            if(order=='ASC')
                 return ((x < y) ? -1 : ((x > y) ? 1 : 0));// A-Z
            else return ((x < y) ? 1 : ((x > y) ? -1 : 0));// Z-A
            
        });

а как бих могъл да направя така че да го сортирам от буквата R примерно:

R
R
R
R
R
R
A
G
D
H
D
S
J

Тоест сортирам си всички които започват с R отначало а другите надолу няма значение с коя буква започват.
 
Код:
<script type="text/javascript">
function first_letter_sort(the_array,the_letter) {
	var the_temporary_array1 = new Array();
	var the_temporary_array2 = new Array();
	for (i in the_array) {
		if (the_array[i].substr(0,1).toLowerCase()==the_letter.toLowerCase()) {
			the_temporary_array1[i] = the_array[i];
		}
		else {
			the_temporary_array2[i] = the_array[i];
		}
	}
	return the_temporary_array1.concat(the_temporary_array2);
}
var sortiranee = new Array("air guitar","rocket","Google","dictionary","rectangle","hi","reader","dog","etc");
sortiranee = first_letter_sort(sortiranee,"r");
for (i in sortiranee) {
document.write(sortiranee[i]+"<br />");
}
</script>
Ето ти функцията, която ти написах набързо.
 
не трябва да е с sort
моя масив е двумерен с обекти и е с над 770 елемента
така много се объркват нещата
 
Дай ми един пример с 5-6 елемента как използваш тази функция, която ми даде, че нещо не схващам какво ми каза преди малко. :D
Имам и един въпрос: Откъде идва промеливата order?
if(order=='ASC')
 
самото подреждане е в функция. от там идва.
значи това order и аз нещо не го чаткам много добре
ето как работи:
array.sort(function(a,b){

});
сега ще съпостави първия елемент на масива с втория
тоест a=array[o] и b=array[1]
и в функцията можеш ги сравняваш и да върнеш -1 , 1 или 0
ако върнеш -1 - a тоест array[0] отива с една позиция по долу, 1 е за позиция нагоре а 0 си остава на същата позиция.

след като върнеш нещо функцията се премества на следващите елементи от масива - а=array[1] b=array[2] и така до края

пример:

array.sort(function(a,b){
return a-b;
});
това сортиране ще сортира масив от числа от най-малката стойност до най-голямата .

п.п не е задължително да върнеш точно -1 или 1 а по-голямо и по-малко от 0


е са ако си разбрал кажи как да оправим проблема :D
 
Знам тази функция, но незнаех, че има и този параметър...
Код:
array.sort(function(a,b){
            var x = a.toLowerCase();
            var y = b.toLowerCase();

            if(order=='ASC') return ((x < y) ? -1 : ((x > y) ? 1 : 0));// A-Z
            else if(order=='DESC') return ((x < y) ? 1 : ((x > y) ? -1 : 0));// Z-A
			else return a.substr(0,1).toLowerCase()==order.toLowerCase() ? -1 : 1;//letter
           
        });
Само там където дефинираш order му слагаш буквата , по която искаш да сортира.
 
А ся по един друг малък проблем от където не разбирам къде може да е проблема

Един празна променлива не иска да присвои масива 2 пъти
не знам защо

правя го така

var Container,
ArrayOrder=new Array();

Container=ArrayOrder;



първия път го присвоява, а втория или всеки следващ просто не иска, а си продължава с този който си е.,..

дори слагам
Container=null; преди това и пак същото
 
Еми то го копира само първия път когато дефинираш променливата, а ако искаш пак да се промени трябва я предефинираш.
 
то хубаво става но като го предефинирам то остава само за функцията в която е дефиниран
как да го направя глобален?
 
Дефинираш я над функцията и не я пишеш в параметрите.Трябва да стане нещо такова:
var b;
var c = "aa";
function clone_b(a) {
b = a;
}
clone_b(c);
alert(b);
Променливата е b,която предефинираш...
 
ее евала стана ама не така по твоя начин а така

Код:
   b.splice(0,b.length);
    for (i in a) {
        b.push(a[i]);
    }

+1 че се занимава с мен толкова време :)
 

Back
Горе