2015-11-15 46 views
0

波紋管功能的目的是隻輸出從被作爲參數傳遞的陣列的非唯一項目:意外的結果在功能上分離的獨特和非唯一項目

"use strict"; 
function nonUnique(data){ 
    var tab = []; 
    for(var d = 0; d < data.length; d++) { 
     if(typeof(data[d]) == "string"){ 
      tab[d] = data[d].toUpperCase(); 
     } 
     else{ 
      tab[d] = data[d]; 
     } 
    } 

    var count = 0; 
    var tab_non_unique = []; 
    var tab_unique = []; 

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

     for(var j = 0; j < tab.length; j++){ 
      if(tab[i] == tab[j]){ 
       count ++; 
      } 

      if(count > 1){ 
       tab_non_unique.push(tab[i]); 
       count = 0; 
       break; 
      } 
      if (count == 1) { 
       tab_unique.push(tab[i]); 
      } 

     } 

    } 
    return tab_non_unique; 
} 

我已經測試功能通過調用它不同的陣列上,但不知何故在

nonUnique([1, 2, 3, 4, 5]); 

它無法通過返回:

=> [ 2, 4 ] 

我不明白什麼在我的代碼導致2和4提高高於1的計數器,因此最終在tab_non_unique數組中。任何幫助將不勝感激,謝謝。

回答

1

的問題是,您重置只有當一個非唯一發現count。但是它應該始終以新號碼開始重置。

所以就把count=0在循環的頂部。

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

    for (var j = 0; j < tab.length; j++) { 
    if (tab[i] == tab[j]) { 
     count++; 
    } 

    if (count > 1) { 
     tab_non_unique.push(tab[i]); 
     break; 
    } 
    if (count == 1) { 
     tab_unique.push(tab[i]); 
    } 

    } 
} 
+0

以及斑點,非常感謝! – Diana380