![]() |
|
||||||||||
|
|||||
|
Допустим мы имеем двумерный массив:
var array:Array = new Array(["Чижик", 2], ["Ёжик", 5], ["Айболит", 3], ["Винни-пух", 1], ["Пыжик ", 4]);мне его нужно отсортировать по первому элементу. Это я могу осуществить с помощью array.sortOn(0); , но результат меня не устраивает: Я не хочу чтобы Ёжик был перым! ![]() Как можно по нормальному отсортировать? Просто array.sort(maySortOrder); не предлагать, нужно обязательно сортировать двумерный массив. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
собственно сама функция сортировки
sortIO = function (a, b) {
//// значение по умолчанию
var r = 0;
//// обычная функция проверки
if (a > b) {
r = 1;
} else if (a < b) {
r = -1;
}
//// если в словах было символ Ё и слова не равны...
if ((a.indexOf ("Ё") != -1 or a.indexOf ("ё") != -1 or b.indexOf ("Ё") != -1 or b.indexOf ("ё") != -1) and r != 0) {
var a2 = a.split ("");
var b2 = b.split ("");
//// проверяем символы последовательно, до первого не совпадениея
for (var i = 0; i < Math.min (a2.length, b2.length); i++) {
//// если символы не равны...
if (a2[i] != b2[i]) {
var ac = a2[i].charCodeAt ();
var bc = b2[i].charCodeAt ();
//// проверка на положение Ё
if ((ac == 1025 and bc > 1045) or (ac == 1105 and bc > 1077) or (ac < 1046 and bc == 1025) or (ac < 1078 and bc == 1105)) {
r = -1;
} else if ((ac == 1025 and bc < 1046) or (ac == 1105 and bc < 1078) or (ac > 1045 and bc == 1025) or (ac > 1077 and bc == 1105)) {
r = 1;
}
//// дальше сравнивать не имеет смысла
break;
}
}
}
return r;
};
arrayT = ["ае- 7", "АЖ- 3", "АЁ- 2", "АЕ- 1", "ЁА- 5", "ЖА- 6", "ЕА- 4", "аж- 9", "ёа-11", "ёа-11", "еа-10", "жа-12", "аё- 8"];
arrayT.sort (sortIO);
for (var i = 0; i < arrayT.length; i++) {
trace (arrayT[i]);
}
trace ("");
//// должно быть true
trace (String (arrayT) == "АЕ- 1,АЁ- 2,АЖ- 3,ЕА- 4,ЁА- 5,ЖА- 6,ае- 7,аё- 8,аж- 9,еа-10,ёа-11,ёа-11,жа-12");
trace ("");
sort2D = function (a, b) {
return sortIO (a[0], b[0]);
};
arrayA = new Array (["чижик", 2], ["ёжик", 5], ["айболит", 3], ["винни-пух", 1], ["пыжик ", 4],["Чижик", 2], ["Ёжик", 5], ["Айболит", 3], ["Винни-пух", 1], ["Пыжик ", 4]);
arrayA.sort (sort2D);
for (var i = 0; i < arrayA.length; i++) {
trace (arrayA[i]);
}
|
|
|||||
|
ОГО! Что то не допер до этого. Классно, спасибо!
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|