2011-05-06 3 views
0

배열이 있는데 다음 느린 배열이 현재와 같은지 확인하려고합니다. 배열이 느리다. 내가 배열의 다음 인덱스를 확인하기 위해 필요하고 같은 이름을 가진 경우, 나무를 구축 끝 범주로 보관배열의 다음 요소가 현재 요소와 같은 이름인지 확인하려면 어떻게해야합니까?

$("#container").append("<table border='1' id='main-table'></table>");  
       var strNames = ["dennis", "dennis", "d00d", "sweet"].sort(); 
       var categories = []; 

       for (var i = 0; i < strNames.length; i++) { 

        if (strNames[i] == strNames[i+1]) 
         categories[i] = strNames[i]; 

        console.log(categories[i]); 
        if (categories.length > 1) { 
         $("#main-table").append("<tr class='main-table-row'><td><div class='expandTableCell' toggle='false'></div></td></tr>"); 
         for (var x = 0; x < categories.length; x++) 
          if (x == 0) 
           $("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellHeader'>" + categories[x] + "</div>"); 
          else 
           $("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellData'>" + categories[x] + "</div>"); 
        } else 
         $("#main-table").append("<tr class='main-table-row'><td>" + strNames[i] + "</tr>"); 
       } 

:

여기에 지금까지 내 논리입니다. 더 많은 정보가 필요하면 더 많은 정보를 제공 할 수 있습니다.

+0

어떤 부분에 도움이 필요합니까? – eykanal

+0

아,이 질문은 일종의 질문하기가 어려웠습니다. 카테고리 배열에 올바른 값을 저장하는 데 도움이 필요합니다. – DMar

+0

중복 된 내용 만 유지하려고합니까? 아니면 현재의 것이 다음 것과 일치합니까? – hunter

답변

0

당신의 방법에 일해야하지만 당신은 갈 :

Live Demo

$("#container").append("<table border='1' id='main-table'></table>"); 

var strNames = ["dennis", "dennis", "d00d", "sweet"].sort(); 
var categories = []; 

for (var i = 0; i < strNames.length; i++) { 
    var name = strNames[i]; 
    if (typeof(categories[name]) == 'undefined') categories[name] = 1; 
    else categories[name] += 1; 
} 

for (var name in categories) { 
    var val = categories[name]; 
    if (val > 1) { 
     $("#main-table").append("<tr class='main-table-row'><td><div class='expandTableCell' toggle='false'></div></td></tr>"); 
     for (var x = 0; x < val; x++) 
      if (x == 0) $("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellHeader'>" + name + "</div>"); 
      else $("#main-table tr.main-table-row td div.expandTableCell").append("<div class='expandTableCellData'>" + name + "</div>"); 
    } else $("#main-table").append("<tr class='main-table-row'><td>" + name + "</tr>"); 
} 
+0

대단히 감사합니다! 나는 이것이 어떻게 작동하고 싶었는지 설명하는 데 어려움을 겪고 있었고, 머리에 맞 혔다. :) – DMar

0

제가

믿어

경우 (strNames [I] == strNames [I + 1]) 카테고리 [I] = strNames [I];

은 'strNames'배열의 마지막 요소를 가리킬 때 실패합니다. i + 1이 배열을 가리 키므로 예외가 발생합니다.

그렇지 않으면이 "if"에 어떤 문제도 나타나지 않습니다. 비교 '가'당신이

for (var i = 0; i < strNames.length-1; i++) 

처럼 루프가 될 뭔가가 나는 또한 다른 문제를 참조 할 필요가이 오류를 방지하려면이 if (categories.length > 1)

if (categories.length >= 1)을 할 필요가 없습니다? 그대로두면 카테고리 길이가 1 일 때 블록이 입력되지 않습니다. 이 일을 제외하고

+0

카테고리에 하나 이상의 아이템 만 있으면 카테고리를 확장하거나 축소하기 위해 클래스를 추가하거나 그 이상을 인쇄하기 때문에> 1로 설정됩니다. – DMar

0

:

if (i + 1 < strNames.length 
    i + 1 < categories.length 
    && categories[i] == strNames[i+1]) 

당신은 여기에 내가 로직을 약간 수정했습니다

관련 문제