Консультация № 169502
17.06.2009, 11:33
0.00 руб.
0 7 2
Здравствуйте.
Скажите пожалуйста как провести сортировку в массиве на js , что получился следующий результат:


Приложение:
сам массив a[1]=1
a[2]=1_1
a[3] =1_3
a[4]=2
a[5]= 1_4
a[6]=2_0
a[7]=0
a[8]=1_18
a[9] =2_3
a[4]=3
a[5]= 1_4
a[6]=3_0
a[7]=2_5

необходимо ,что бы на выходе был следующий результат:
a[7]=0
a[1]=1
a[2]=1_1
a[3] =1_3
a[5]= 1_4
a[8]=1_18
a[4]=2
a[6]=2_0
a[9] =2_3
a[7]=2_5
a[4]=3
a[6]=3_0

Обсуждение

Неизвестный
17.06.2009, 14:18
общий
17.06.2009, 17:40
это ответ
Здравствуйте, Dima1967.

Для получения нужного Вам результата при сортировке сравнивайте элементы массива как строки, например if(String(a[i])>String(a[i+1]){перестановка}
3
Неизвестный
17.06.2009, 14:27
общий
А как сделать перестановку ? Она и не получается.
Неизвестный
17.06.2009, 14:55
общий
например, var aa=a[i];a[i]=a[i+1];a[i+1]=aa;
Неизвестный
17.06.2009, 15:10
общий
непонятно как у вас два разных элемента массива с одним индексом
Неизвестный
17.06.2009, 15:27
общий
это ответ
Здравствуйте, Dima1967.
Можно сравнивать элементы, но это путь, откровенно говоря, топорный. Гораздо лучше было бы на Вашем месте вспомнить, что Ваш массив - это Javascript-объект типа Array. А у объектов данного типа есть метод sort(compareFunction), где compareFunction - ссылка на функцию сравнения. Ее, эту функцию, с помощью которой Вы хотите упорядочивать массив, надо написать предварительно, но это параметр необязательный. Но так как, насколько я понимаю, члены массива упорядочиваются у Вас не в слишком алфавитном порядке, напишем функцию. Итак, общий код примерно следующий:

// функция сравнения должна возвращать следующие значения:
// 1, если a следует после b
// 0, если порядок следования не меняется
// -1, если b следует после a
function compare(a, b) {
var p_a = a.split('_');
var p_b = b.split('_');
// теперь переходим непосредственно к сравнению строк
if (p_a[0] < p_b[0]) {
// если первая цифра первого числа меньше, чем первая цифра второго числа, то вторая строка следует за первой
return -1;
}

if (p_a[0] > p_b[0]) {
// если первая цифра первого числа больше, чем первая цифра второго числа, то первая строка следует за второй
return 1;
}
if (p_a[0] == p_b[0]) {
// если первые цифры обоих чисел равны, то сравниваем вторые числа
if (p_a[1] < p_b[1]) {
// если второе число больше первого, вторая строка следует за первой
return -1;
} else {
// а здесь наоборот
return 1;
}
}
}
var a = [1,1_1...]; // исходный массив
var b = a.sort(compare); // получаем нужный нам массив.

С уважением, Товарищ Бородин
5
5
Неизвестный
17.06.2009, 15:29
общий
я ошибся (спешил) - индексы идут подряд т.е. 1,2,3,4 и т.д. надо ,что бы сортировка была по значениям - т.е то что относится к 1 шло ( 1, 1_1 , 1_3,1_4,1_18 ) , к 2 шло (2, 2_0, 2_3, 2_5) - это в таком виде приходит ответ с сервера 1 - это город 1_1 - область в этом городе - мне надо что бы оно выводилось упорядоченно.
давно
Посетитель
7438
7205
17.06.2009, 17:41
общий
Товарищ Бородин:
Надо бы ответ подправить
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа