| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Сортировка объекта по полю в Java Script |
| Автор: patap 7.5.2005, 14:57 | ||||||
| Здорово, народ. У меня такая проблемка. Я создал объект и заполнил его, в общем вот фрагмент проги:
теперь подскажите: Как упорядочнить объект athlantic[] по убыванию, по полю wins? Я делал вот так:
в Pascal это работает без проблем, а в JavaScript начинает гнать, в чем проблема?
|
| Автор: Aliance 8.5.2005, 00:04 | ||
Сортировка в JavaScript происходит так:
Это лишь пример, нужно знать конкретнее твою задачу... |
| Автор: patap 8.5.2005, 12:09 | ||
| мне нужно взять и сравнить все athlantic[i].wins, и упорядочнить по убыванию athlantic[i] относительно этого поля(wins). вот допустим заполним поля:
теперь если вывести на экран поля athlantic[i].name, будет вот такой результат 1. Бостон 2. Нью-Джерси 3. Филадельфия 4. Торонто а мне нужно провести сортировку и упорядочнить команды по количеству побед, т.е. по полю wins, и результат должен быть такой: 1. Бостон(wins=39) 4. Торонто(wins=38) 3. Филадельфия(wins=36) 2. Нью-Джерси(wins=35) в общем мне нужна функция сортировки, чтобы ей передавался объект athlantic, она его переробатывала и выдавала результат. во, вроде все ясно, но если чего спрашивай. |
| Автор: Aliance 8.5.2005, 12:58 | ||
|
| Автор: Sardar 8.5.2005, 15:43 | ||
| patap это еще что за паскале-дельфийский код! Так извратно на JS не пишут С сортировки пузырьком вообще упал Пишем правильно:
Собстна надеюсь что ты врубишся в приём и перестанешь думать в убогом паскалевском стиле(да не в обиду всем фанатам, просто моё ИМХО) |
| Автор: patap 9.5.2005, 23:35 | ||
| Sardar ну, дружище, спасибо! угодил так угодил! именно то, что надо, есть конечно непонятные моменты, ну я еще <вырезано модератором>, а если что, то спрашу. ок? а на счет паскаля ты прав. я просто только его более менее и знаю. а java script вот только начал осваивать, тут по-ходу свой подход нужен, но со временем вкурю что к чему, язык не из сложных. в общем спасибо тебе. удачи!
|
| Автор: patap 10.5.2005, 00:58 | ||||||
| Sardar обоснуй пожалуйста: 1. что значит [] в этой функции
или я так думаю что это пустой объект? 2. объясни как действует data в этой функции?
и еще такоя просьба: на простом примерчике объясни как действует this. а то я вроде понимаю, но не совсем. буду очень благодарен. Aliance прости дружище, я с непривычки. буду стараться.
|
| Автор: Aliance 10.5.2005, 01:08 | ||||||
интересно, ты сам писал скрипт, который ты выложил выше... ведь там она использована. Вообще, глобальная ссылка this указывает на объект (в широком смысле этого слова), от которого производится обращение. http://forum.vingrad.ru/index.php?showtopic=50738
это массив. что непонятно?
я так понимаю, по умолчанию это объект, а мы его делаем массивом... |
| Автор: Sardar 10.5.2005, 03:05 | ||||||
Литеральный пустой массив. Синтаксис: ['test', 'test2', 'test3'] - массив из трёх элементов.
Это просто массив с инфой, которую ты сам забиваешь.
Как в любом ООП языке this это сылка на текущий обьект, в контексте которого исполняется функция(метод). Если функцию вызываем просто как функцию, то она исполняется в контексте window. |
| Автор: patap 10.5.2005, 22:05 | ||
| привет еще раз. я в общем посидел подумал, поразбирал код и появились еще вопросы я прокоментировал строки так как я это понял, если что не правильно, прошу исправить и там где заданы вопросы - дайте ответы. если не сложно изложите в такой же форме как и я. заранее спасибо мужики.
|
| Автор: Sardar 11.5.2005, 15:31 | ||||||||||||
Не совсем, field это имя селектируемого(выбираемого) поля по которому сортируем. Comparator(compare - сравнивать) - это функция, задающая порядок сортировки по полю обьекта. Стандартный компаратор опеделён там же в функции, сортирует по возрастанию, работает со всеми типами.
Если контейнер пуст, то нафиг чего либо возвращать
Ну почти, создаём обьект юзая конструктор CommandContainer, это не просто вызов функции
Собстна метод select контейнера создан для выборок по заданному полю, результат отсортирован в заданном направлении. То есть пишем: container.select("wins") - выбрали и осортировали обьекты по полю wins с дефолтовым компаратором.
Массив с данными лежит в поле container контейнера обьектов, мы его достали. patap вообще JS это не такой простой язык как ты думаешь, он прост для тех кто понимает что такое функциональные языки(хотя JS не функциональный язык). Если ты писал на Python, то JS тебе покажеться очень простым и удобным. Если на Java, то наделаешь много лажи, пытаясь создать иерархии "классов", хотя понятия типа/класса в JS нет. Ну а если ты кроме паскаля/C ничего не знаешь, то придётся расслабиться и выкинуть из головы все приёмы и ограничения, что ты имел раньше. В JS, можно всё, можно даже писать код, который будет изменять сам себя по требованию задачи(лямбда программирование). |
| Автор: Иль 8.6.2005, 15:58 |
| О! Ничего не понимаю Добавлено @ 16:03 Sardar, если получится, то можно на словах - чего тут делается, принцип. |
| Автор: Иль 8.6.2005, 16:32 |
| Sardar, вот как я понял твою идею: В Array накидываем объектов которые хотим отсортировать в нем же, но сравнивать и сортировать сами элементы сего массива нам не интересно (да и чего мы там насравниваем Ну скажите, что это так и мне будет полная нирвана!!! А то я тут уже до чертиков дошол (какой-то eval() мне привиделся |
| Автор: Иль 8.6.2005, 18:52 | ||
Sardar, почему на "string" проверяются и "a", и "b". Как повлияет на сравнения если проверять только "a" и .toLowerCase() применять сразу к обоим? |
| Автор: Sardar 9.6.2005, 01:21 | ||||
Да, это так
Потому что в поле обьекта може лежать что угодно. Если это строка, то обычно не нужно учитывать регистр, для этого и приводим к нижнему регистру, а затем сравниваем. Если регистр важен, то эти две строчки убираем. |
| Автор: Иль 9.6.2005, 21:23 | ||
| Ура! Sardar, супер!!! Сделал! Все так классно прыгает! Г-г-г. Радости до ушей, аж работать не могу. Сделал мальца не так, но подход тот же. Хотя может и так как у тебя - не то чтобы я прототипы и конструкторы не долюбливал, а только как вижу чужие имена переменных, функций и тд (запоминать, разбираться...) голова сразу стремится суть выковырять и только. Если б не ты, ведь уже средствами JS начал .sort() реализовавать, уф. Во, боялся забыть:
надо делать от двух (.length>1). Чего один элемент сортировать, с чем его сравнивать Тк я не хочу хранить объекты в массиве, то для сортировки (вернее мне нужно только представление о ней) делаю срисовку конструктором с группы нужных объектов в сортируемый массив, те беру одно свойство объектов по которому сортируем и заодно добавляю имя, чтоб потом связать сортировку с рабочими объектами по имени и получаю маленькие объектики в элементах массива (боже, неужели это я сказал). После использую представление о сортировке (массив) и отдаю его сборщику мусора (уж не знаю, что он там с ним делает) Sardar, чтоб мы без создателей интерфейса Array в этом случае делали? Не ругай их Добавлено @ 21:27 Да, чтоб быть точным доконца, я не всегда отдаю наработанное сборщику мусора |
| Автор: Sardar 9.6.2005, 22:25 | ||||
Не нравиться что интерфейс Dictionary (ключь=>значение) приходиться самому реализовывать. Не нравиться что нет элементарных методов map, filter, walk и других, приходиться писать самому. А ещё ты этот же Array посмотри в JS1.5 и JS1.3(долбанный ИЕ5.0). Чувство шока и обиды Хорошо что все необходимое можно реализовать самому, но теряеться скорость(не критично) и увеличиваеться размер(очень плохо!).
По любому когда нибудь ты утеряешь ссылку на значение(массив, что угодно), например при выходе из функции. Сборщик мусора незаметно приберёт всё что из телеги выпало)) В JS не говорят о сборщике мусора, это скритовый язык, автоматический сбор мусора есть понятие "само собой разумееться". |