2015-08-28 39 views
0
<p id="demo"></p> 

<script> 

//This is the email list 

var emailList =["[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", ]; 

//I am removing @yahoo.edu 

function removeAddress(list){ 
    for (var i = 0; i < list.length; i++) { 
     list[i] = list[i].replace("@yahoo.edu", " "); 
    } 
} 

//Function to remove the duplicates in the list 

function removeDuplicates(list) 
{ 
    var hash = {}; 
    for (var i = 0; i < list.length; i++) 
    { 
     var array = list[i]; 
     for (var j = 0; j < array.length; j++) 
     { 
      var val = array[j]; 
      var hashedVal = hash[val]; 
      if (hashedVal === undefined) 
      { 
       hash[val] = true; 
      } 
      else 
      { 
       array.splice(j, 1); 
       if (array.length == 0) 
       { 
        list.splice(i, 1); 
       } 
      } 
     } 
    } 
} 
document.getElementById("demo").innerHTML = emailList; 
//Remove @yahoo.edu from the list 

removeAddress(emailList); 

//Sort the list 

emailList.sort(); 

//Remove the duplicates 

removeDuplicates(emailList); 

//Print the list 

document.getElementById("demo").innerHTML = emailList; 
</script> 

</body> 
</html> 
+2

「不工作」不是問題描述。你的功能代之以什麼?它什麼都沒做?它創造更多重複?它向鄰居的窗戶扔石頭?控制檯中有任何錯誤? – Teemu

+0

@Teemu我剛接觸Javascript。我的函數removeDuplicates在調用時不會從我的列表中刪除重複項。我正在使用Tryit Editor v2.5。我沒有收到錯誤,persae,我的程序沒有運行。 – MJB

+0

有許多第三方庫具有執行此操作的功能。例如,jQuery有'$ .unique',Underscore有'_.uniq'。 – Barmar

回答

5

首先,我不知道爲什麼你要遍歷一個2維的數組。這沒有必要。其次,你正在迭代數組,同時刪除元素。當元素被移除時,它後面的所有元素都被推送1個索引。然後i增加,導致您錯過一個項目。如果您要繼續使用for循環並使用.splice(),則需要在刪除項目時手動減量i。另外,由於emailList是一個字符串數組,因此您只需要一個循環。

function removeDuplicates(list) 
{ 
    var hash = {}; 
    var newList = []; 
    for (var i = 0; i < list.length; i++) 
    { 
    var email = list[i]; 
    if (hash[email] === undefined) { 
     hash[email] = true; 
    } else { 
     list.splice(i, 1); 
     i --; 
    } 
    } 
} 

http://codepen.io/anon/pen/YyKJOP

0

所以基本上,你只是獲取用戶名列表。它可能已被簡化爲以下幾點:

var emailList = ["[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n", "[email protected]\n"]; 
 

 
var usernameHash = emailList.reduce(function(usernames, email, i) { 
 
    var username = email.slice(0, email.indexOf('@')); 
 
    if(!usernames[username]) usernames[username] = true; 
 
    return usernames; 
 
}, {}); 
 

 
var usernames = Object.keys(usernameHash) 
 

 
document.write(usernames.join(', '));

+1

在篩選器中搜索列表使得此O(n^2)。哈希方法是O(n)。雖然如果名單很小,這可能不是什麼大不了的事。 – Barmar

1

在內部for,你是循環字符串,而不是另一個數組。 其次,你可能想要.join()這個數組在最後獲得一個可打印的字符串。