2017-12-12 4 views
-1

자바 스크립트에서이 행을 표로 정렬하려면 도움이 필요합니다. 설명 : 나는 순서와 그룹에 의해 주문하려면, 그것은 순서에 의해 순서, 의미하지만, 때 그룹 ... 내부 내 목록 그룹, 순서가있는 분야입니다 : 내가되고 싶은자바 스크립트 배열로 그룹으로 그룹화

ID SEQ GROUP NAME 
    0 0 0  field1 
    7 1 0  field2 
    4 2 0  field3 
    2 3 0  field4 
    3 4 0  field5 
    6 5 0  field6 
    5 6 0  field7 
    1 7 0  field8 
    15 1 2  field9 
    12 2 2  field10 
    11 3 2  field11 
    14 14 10  field12 
    18 13 8  field13 
    19 14 8  field14 
    13 13 10  field15 
    8 8 0  field16 
    9 9 0  field17 
    10 10 0  field18 
    16 11 0  field19 
    17 12 0  field20 

은 같은 :

ID SEQ GROUP NAME 
    0 0 0  field1 
    7 1 0  field2 
    4 2 0  field3 
    2 3 0  field4 
     15 1 2  field9 -> this field is from a group with ID = 2. 
     12 2 2  field10 -> this field is from a group with ID = 2. 
     11 3 2  field11 -> this field is from a group with ID = 2. 
    3 4 0  field5 
    6 5 0  field6 
    5 6 0  field7 
    1 7 0  field8 
    8 8 0  field16 
    9 9 0  field17 
    10 10 0  field18 
     13 13  10  field15 -> this field is from a group with ID = 10. 
     14 14  10  field12 -> this field is from a group with ID = 10. 
    16 11 0  field19 
    17 12 0  field20 
    18 13 8  field13 
    19 14 8  field14 

내 JS 코드는 다음과 같습니다

function Order() 
{ 
    var rows = $('#tbs tr:not(:first)').detach(); 

    rows.sort(function (row1, row2) { 
     return parseInt($(row1).find('td.seq').text()) - parseInt($(row2).find('td.seq').text()); 
    }); 

    rows.each(function() { 
     console.log($(this).text()); 
    }); 
} 

SEQ 열이 내가 원하는 순서입니다.

여기에 수학을 좋아하는 사람? 롤 ...

안부!

+0

당신의 JS 코드는 무엇인가? – Sysix

+0

질문이 업데이트되었습니다. –

답변

1

기본적으로 지정된 데이터를 순서대로 정렬 한 다음 주어진 그룹으로 인해 트리를 작성해야합니다. 그런 다음 정렬 된 결과를 얻기 위해 트리를 탐색해야합니다.

var data = [{ id: 0, seq: 0, group: 0, name: 'field1' }, { id: 7, seq: 1, group: 0, name: 'field2' }, { id: 4, seq: 2, group: 0, name: 'field3' }, { id: 2, seq: 3, group: 0, name: 'field4' }, { id: 3, seq: 4, group: 0, name: 'field5' }, { id: 6, seq: 5, group: 0, name: 'field6' }, { id: 5, seq: 6, group: 0, name: 'field7' }, { id: 1, seq: 7, group: 0, name: 'field8' }, { id: 15, seq: 1, group: 2, name: 'field9' }, { id: 12, seq: 2, group: 2, name: 'field10' }, { id: 11, seq: 3, group: 2, name: 'field11' }, { id: 14, seq: 14, group: 10, name: 'field12' }, { id: 18, seq: 13, group: 8, name: 'field13' }, { id: 19, seq: 14, group: 8, name: 'field14' }, { id: 13, seq: 13, group: 10, name: 'field15' }, { id: 8, seq: 8, group: 0, name: 'field16' }, { id: 9, seq: 9, group: 0, name: 'field17' }, { id: 10, seq: 10, group: 0, name: 'field18' }, { id: 16, seq: 11, group: 0, name: 'field19' }, { id: 17, seq: 12, group: 0, name: 'field20' }] 
 
    .sort(function (a, b) { return a.seq - b.seq; }), 
 
    tree = function (data, root) { 
 
     var r = [], o = {}; 
 
     data.forEach(function (a) { 
 
      o[a.id] = { data: a, children: o[a.id] && o[a.id].children }; 
 
      if (a.group === root) { 
 
       r.push(o[a.id]); 
 
      } else { 
 
       o[a.group] = o[a.group] || {}; 
 
       o[a.group].children = o[a.group].children || []; 
 
       o[a.group].children.push(o[a.id]); 
 
      } 
 
     }); 
 
     return r; 
 
    }(data, 0), 
 
    sorted = tree.reduce(function traverse(r, a) { 
 
     return r.concat(a.data, (a.children || []).reduce(traverse, [])); 
 
    }, []); 
 

 
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

감사합니다 !!! 일했습니다! .. 시간 내 주셔서 감사합니다 @ 니나 숄츠! –

관련 문제