2011-05-06 61 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 2011-05-06 18:01:32

+0

啊是的,这个问题很难问,我需要帮助将正确的值存储到categories数组中。 – DMar 2011-05-06 18:07:14

+0

你想只保留重复吗?或者,如果当前的人匹配下一个? – hunter 2011-05-06 18:12:16

回答

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 2011-05-06 20:12:39

0

相信

如果(strNames [I] == strNames第[i + 1]) 类别[I] = strNames [I];

将失败,当我指向'strNames'数组的最后一个元素。因为i + 1会指出数组,所以会抛出异常。

否则,我在这个“if”上看不到任何问题。为了避免这种错误,你需要让你的for循环是这样的

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

我也看到了另一个问题“如果”比较if (categories.length > 1)

不它必须是if (categories.length >= 1)?如果保持原样,那么当类别长度为1时,不输入块。

+0

它被设置为> 1,因为如果该类别只有一个项目只是打印该项目,如果比较好,则添加一个类以扩展和缩小类别。 – DMar 2011-05-06 18:09:36

0

除了这样做:

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

你应该对你的方式

相关问题