Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.10.2013, 21:54
Кандидат Javascript-наук
Отправить личное сообщение для cha0s Посмотреть профиль Найти все сообщения от cha0s
 
Регистрация: 21.10.2013
Сообщений: 125

Помогите с сортировкой
Имеется такой контент

<div id="content">
    <div position="16">8</div>
    <div position="1,1">2</div>
    <div position="1">1</div>
    <div position="1,5">6</div>
    <div position="1,2">3</div>
    <div position="1,2,1,1">4</div>
    <div position="1,4">5</div>
    <div position="2">7</div>
</div>
<div id="results">
</div>


Нужно при помощи JS отсортировать его чтоб блоки расположились так:

<div position="1">1</div>
<div position="1,1">2</div>
<div position="1,2">3</div>
<div position="1,2,1,1">4</div>
<div position="1,4">5</div>
<div position="1,5">6</div>
<div position="2">7</div>
<div position="16">8</div>


То есть сортировка происходит по параметру position, вот мой набросок уже с ним запарился :/

var myArray = $("#content div");
myArray.sort(function (a, b) {

    a = $(a).attr("position");
    b = $(b).attr("position");


if ((a.split(',').length-1 === 0) && (b.split(',').length-1 === 0)) { // ЕСЛИ ОБА ЧИСЛА ЦЕЛЫЕ, ничего не делаем а приводим к 
        a = parseInt(a);                                                         //типу INT
        b = parseInt(b);
}
    
if ((a.split(',').length-1 !== 0) && (b.split(',').length-1 === 0)) { // если первое не целое а второе целое
        posA = a.indexOf(',');    
        a = parseInt(a.substr(0,posA);
        b = parseInt(b);
        if (a == b) {a=0;}
} 
    
if((a.split(',').length-1 === 0) && (b.split(',').length-1 !== 0)) { // если первое целое, а второе не целое
        posB = b.indexOf(',');
        a = parseInt(a);
        b = parseInt(b.substr(0,posB));
        if (a == b) {b=0;}
}


if(a > b) {
        return 1;
    } else if(a < b) {
        return -1;
    } else {
        return 0;
    }
});

$("#results").append(myArray);


он еще не закончен под все, то логику я строил такую проверял в значение количество запятых, на этом мог базировать, дальше перестановки, ну то есть если одно число целое, а другое с запятой то мне надо сравнить только первые их цифры, а если они оба дробные типа 1,2 и 1,1 то надо уже сравнить по 2-рым цифрам после запятой и т.д, но что-то его клинет, с целыми числами все ок получается, но у меня задача что надо разобрать строки... помогите люди добрые для кого такая задача элементарная

Последний раз редактировалось cha0s, 22.10.2013 в 22:24.
Ответить с цитированием
  #2 (permalink)  
Старый 22.10.2013, 23:26
Кандидат Javascript-наук
Отправить личное сообщение для cha0s Посмотреть профиль Найти все сообщения от cha0s
 
Регистрация: 21.10.2013
Сообщений: 125

а вроде сделал))

Проверьте хотя-бы сойдет или нет)

var myArray = $("#content div");
myArray.sort(function (a, b) {

    a = $(a).attr("position");
    b = $(b).attr("position");
    
   
if((a.split(',').length-1 === 0) && (b.split(',').length-1 === 0)) {   
     a = parseInt(a);
     b = parseInt(b);      
}
    
if(a > b) {
        return 1;
    } else if(a < b) {
        return -1;
    } else {
        return 0;
    }
});

$("#results").append(myArray);


Получается что сделал просто если в строке нету запятой, то я преобразовываю к числу и все, а остальное уже за меня реализовано строковые сравнения.... все верно? вроде работает
Ответить с цитированием
  #3 (permalink)  
Старый 22.10.2013, 23:35
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

Сообщение от cha0s Посмотреть сообщение
а остальное уже за меня реализовано строковые сравнения....
так на чем-нибудь вроде '1,2'<'1,12' оно и отработает как любая уважающая себя строка
Ответить с цитированием
  #4 (permalink)  
Старый 23.10.2013, 00:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

cha0s,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  #content{float:left}
  #content div:after{content:"→"}
  #results span:before{content:"→"}
  </style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
$(document)
    .ready(function () {
        var d = $.makeArray($("#content div"))
            .sort(function (b, c) {
                b = $(b).attr("position").split(",");
                c = $(c).attr("position").split(",");
                for (var a = 0; a < b.length; a++) {
                    if (a == c.length || +b[a] > +c[a]) return 1;
                    if (+b[a] < +c[a]) return -1
                }
                return a < c.length ? -1 : 0
            });
        $("#results")
            .append(d.map(function (b, c) {
                return $(b).clone().append($('<span/>', {text : $(b).attr("position")}))
            }))
    });
</script>
</head>

<body>
<div id="content">
    <div position="16">8</div>
    <div position="1,1">2</div>
    <div position="1">1</div>
    <div position="1,5">6</div>
    <div position="1,2">3</div>
    <div position="1,2,1,1">4</div>
    <div position="1,4">5</div>
    <div position="2">7</div>
</div>
<div id="results">
</div>
</body>

</html>

Последний раз редактировалось рони, 23.10.2013 в 00:47.
Ответить с цитированием
  #5 (permalink)  
Старый 23.10.2013, 00:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

если сравнивать как строки
alert('1,20'<'1,8');
20 меньше 8 отлично ????
Ответить с цитированием
  #6 (permalink)  
Старый 23.10.2013, 00:38
Кандидат Javascript-наук
Отправить личное сообщение для cha0s Посмотреть профиль Найти все сообщения от cha0s
 
Регистрация: 21.10.2013
Сообщений: 125

а ну в натуре)) тупал что-то, я и думаю что-то как-то все просто слишком упростилось у меня))) спасиб! буду разбираться)))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ!!! JavaScript aktau07 Общие вопросы Javascript 9 03.10.2011 23:10
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Помогите нубу Fongolcs Работа 34 19.05.2010 22:45
помогите задать селектор! mkrylov jQuery 2 28.06.2009 20:34