Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.06.2016, 13:34
Новичок на форуме
Отправить личное сообщение для Diana123456 Посмотреть профиль Найти все сообщения от Diana123456
 
Регистрация: 23.06.2016
Сообщений: 5

Вывод отсортированных элементов
$("#buttonSort").click(function () {
                if ($('#SortByName').is(':checked')) {
                    var mylist = $('.entered_data');
                    var listitems = mylist.children('div').get();
                    console.log(listitems);
                    console.log(typeof listitems);
                    listitems.sort(function (a, b) {
                        var compA = $(a).text();
                        var compB = $(b).text();
                        return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
                    });
                    $.each(listitems, function (idx, itm) {
                        mylist.append(itm);
                    });
                }
               
                else if ($('#SortByDateStart').is(':checked')) {
                    $('.entered_data').each(function () {
                    var startdate = $(this);
                    var startdateitm = startdate.find('h3').get();
                    console.log(startdateitm);
                    console.log(typeof startdateitm);//1
                    var text2 = $(startdateitm).text();
                    console.log(text2);
                    console.log(typeof text2);//2
                    var text22 = text2.split(/(?=(?:\d{4})+(?!\d))/);
                    console.log(text22);
                    console.log(typeof text22);//3
                    var map = text22.map(function (e, i) {
                        return {index: i, value: e};
                    });
                    console.log(map);
                    console.log(typeof map);//4
                    map.sort(function (a, b) {
                        return new Date(a.value).getTime() - new Date(b.value).getTime();
                    });
                    console.log(map);
                    console.log(typeof map);//5
                    var result = map.map(function (e) {
                        return text22[e.index];
                    });
                    console.log(result);
                    console.log(typeof result);//6
                   $.each(result, function (idx, itm) {
                        $('.entered_data').append(itm);
                    });
                    });
                }


Есть код сортировки элементов по именам и по датам. По имени сортировка происходит, по датам - нет, отсортированные данные выводятся внизу блока. Как это можно исправить?
Изображения:
Тип файла: jpg Untitled.jpg (8.2 Кб, 3 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 23.06.2016, 15:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Diana123456,
лучше полный макет c html.
Ответить с цитированием
  #3 (permalink)  
Старый 23.06.2016, 15:52
Новичок на форуме
Отправить личное сообщение для Diana123456 Посмотреть профиль Найти все сообщения от Diana123456
 
Регистрация: 23.06.2016
Сообщений: 5

https://jsfiddle.net/w1spmsad/
- Здесь html
А вот так выглядит подключаемый json
{
"items": [
{
"name": "Alla",
"lastname": "Petrova",
"description": "Working in Moscow",
"dateofstart": "2010-11-10",
"dateofend": "2020-01-01"
},
{
"name": "Victor",
"lastname": "Alekseev",
"description": "Working in Moscow",
"dateofstart": "2009-09-10",
"dateofend": "2030-04-05"
},
{
"name": "Petr",
"lastname": "Dontsov",
"description": "Working in Moscow",
"dateofstart": "2020-10-10",
"dateofend": "2060-09-05"
},
{
"name": "Victor",
"lastname": "Alekseev",
"description": "Working in Moscow",
"dateofstart": "2009-09-10",
"dateofend": "2040-05-03"
}
]
}
Ответить с цитированием
  #4 (permalink)  
Старый 23.06.2016, 16:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Diana123456,
попробуйте так
$("#buttonSort").click(function() {
        $("#SortByName").is(":checked") ? dataObj.items.sort(function(a, b) {
            a = a.name;
            b = b.name;
            return a < b ? -1 : a > b ? 1 : 0
        }) : $("#SortByLastName").is(":checked") ? dataObj.items.sort(function(a, b) {
            a = a.lastname;
            b = b.lastname;
            return a < b ? -1 : a > b ? 1 : 0
        }) : $("#SortByDateStart").is(":checked") ? dataObj.items.sort(function(a, b) {
            return (new Date(a.dateofstart)).getTime() - (new Date(b.dateofstart)).getTime()
        }) : $("#SortByDateEnd").is(":checked") && dataObj.items.sort(function(a, b) {
            return (new Date(a.dateofend)).getTime() -  (new Date(b.dateofend)).getTime()
        });
        $(".entered_data").html("");
        testProject.render()
    })
Ответить с цитированием
  #5 (permalink)  
Старый 23.06.2016, 17:09
Новичок на форуме
Отправить личное сообщение для Diana123456 Посмотреть профиль Найти все сообщения от Diana123456
 
Регистрация: 23.06.2016
Сообщений: 5

С ума сойти, вы гений! То, что я пыталась сделать через 300 строк кода вы написали в 20. Это магия, не иначе. Спасибо вам огромное!
Ответить с цитированием
  #6 (permalink)  
Старый 23.06.2016, 18:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Diana123456,
тоже самое чуть покороче
$("#buttonSort").click(function() {
    function d(a) {
        return (new Date(a)).getTime()
    }
    var e = $(":checked").index("[name='sort']"),
        c = [{key: "name"}, {key: "lastname"}, {key: "dateofstart",foo: d}, {key: "dateofend",foo: d}][-1 < e ? e : 0];
    dataObj.items.sort(function(a, b) {
        a = a[c.key];
        b = b[c.key];
        c.foo && (a = c.foo(a), b = c.foo(b));
        return a < b ? -1 : a > b ? 1 : 0
    });
    $(".entered_data").html("");
    testProject.render()
});
Ответить с цитированием
  #7 (permalink)  
Старый 23.06.2016, 20:52
Новичок на форуме
Отправить личное сообщение для Diana123456 Посмотреть профиль Найти все сообщения от Diana123456
 
Регистрация: 23.06.2016
Сообщений: 5

О, спасибо вам огромное!
Буду учиться грамотному коду на вашем примере
Ответить с цитированием
  #8 (permalink)  
Старый 23.06.2016, 21:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Diana123456
грамотному коду
для грамотного, переменным и функциям лучше давать осмысленные названия,
на всякий случай
Как писать неподдерживаемый код?
Ответить с цитированием
  #9 (permalink)  
Старый 24.06.2016, 01:28
Новичок на форуме
Отправить личное сообщение для Diana123456 Посмотреть профиль Найти все сообщения от Diana123456
 
Регистрация: 23.06.2016
Сообщений: 5

Спасибо вам, я почитаю. Книгу эту частично проходила, но эту главу обошла стороной.
Ответить с цитированием
  #10 (permalink)  
Старый 24.06.2016, 01:48
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

рони,
приведенное решение не будет сортировать правильно, так как нет учета локалей https://learn.javascript.ru/intl
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование элементов и вывод результата Adverterio Элементы интерфейса 3 26.11.2015 16:36
Вывод заданного к-ва элементов списка SeGun Элементы интерфейса 6 14.06.2014 22:44
Вывод случайных элементов из массива в таблицу Narm0 Общие вопросы Javascript 10 06.08.2013 12:39
поочередный вывод элементов массива seosovest Общие вопросы Javascript 7 09.04.2012 10:47
Вывод переменного по количеству элементов массива из json ArmagedDance Элементы интерфейса 4 08.06.2011 10:45