Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Сортировка элементов массива


Автор: ОнКофе 23.3.2008, 22:10
необходимо отсортировать массив, например
на входе
var Array = ["a","b","c","a","d","e","a","f","b"];

на выходе
Array = ["a","b","c","a(1)","d","e","a(2)","f","b(1)","a(3)"];

пробую сделать вот так:

Код

for (var i=0; i<Array.length; i++)
{
 temp = Array[i];
 for (var j=0; j<Array.length; j++)
 {
  step=0;
  step=step+1;
  qwerty = Array.shift();
   if (temp==qwerty) qwerty=qwerty+"("+step+")";
   Array.push(qwerty);
 }
                                        
document.Write(tempName+"<BR>");



но на выходе получаю
Array = ["a","b","c","a(1)","d","e","a(1)(1)","f","b(1)","a(1)(1)(1)"];

Может есть идеи перебирать массив как-то по-другому?

Автор: Optimus 23.3.2008, 22:18
Цитата(ОнКофе @  23.3.2008,  22:10 Найти цитируемый пост)

Код

step=0;
step=step+1;


step всегда будет 1

Автор: ОнКофе 23.3.2008, 22:32
это я уже понял... не могу догнать как сделать правильно

Автор: ksnk 23.3.2008, 22:46
Интересно, а почему то что получается называется сортировкой?

Требуемый результат, вроде, получается вот так:
Код

var Array = ["a","b","c","a","d","e","a","f","b"];
var tmp={};
for (var i=0; i<Array.length; i++)
{
 var temp = Array[i];
 tmp[temp]=(tmp[temp] ||0)+1;
 if(tmp[temp]!=1)Array[i]+='('+tmp[temp]+')';
}                                    
alert(Array);

Автор: Optimus 23.3.2008, 22:49
Может так:
Код

for (var i=0; i < Array.length; i++)
{
 temp = Array[i];
 step=1;
 for (var j=0; j<Array.length; j++)
 {
  
  qwerty = Array.shift();
   if (temp==qwerty) 
   {
     qwerty=qwerty+"("+step+")";
     ++step;
   }
   Array.push(qwerty);
 }
 
 document.Write(tempName+"<BR>");
}       

Автор: ОнКофе 23.3.2008, 23:08
все сам догнал...
вроде бы так должно работать быстрее всего (если я не прав то с удовольствием узнаю о более быстрых способах)

вот что получилось у меня:

Код

for (var i=0; i<Array.length; i++)
 {
  temp = Array[i];
  count=0;
   for (var j=i+1; j<Array.length; j++)
    {
      tempN = Array[j];
     if (temp==tempN) 
     {
       count = count+1; 
       Array[j]= temp+"("+count+")";
     }
   }
 }
document.Write(Array.join("<BR>"));

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)