iT邦幫忙

0

JS移除重複選項

程式碼在這裡

如題,請問怎樣移除重複的選項?
我在想是不是要再建立一個for迴圈去創建新的陣列....之類的

firecold iT邦新手 3 級 ‧ 2020-08-14 17:59:32 檢舉
https://guahsu.io/2017/06/JavaScript-Duplicates-Array/

1 個回答

2
glj8989332
iT邦新手 2 級 ‧ 2020-08-14 22:05:56
最佳解答

假設你的text就是key, 用object當hashmap做檢查即可.

每for loop就檢查該key, 如果不在hashmap, 就可以加入select, 也把它加入hashmap; 否則就略過

table = document.getElementById("myTable");
tr    = table.getElementsByTagName("tr");
var select = document.getElementById("filter");
  
var checkMap = {};

for (i = 0; i < tr.length; i++) {
   td = tr[i].getElementsByTagName("td")[0];
 
   //console.log(td);
   if (td) {
      txtValue = td.textContent || td.innerText;
      if(txtValue in checkMap){
            continue;
      }
      else{
            checkMap[txtValue] = true;
            console.log(txtValue);

            var option = document.createElement("option");
            var    txt = document.createTextNode(txtValue);
            option.appendChild(txt);
            select.insertBefore(option,select.lastChild)
      }
   }
}
amisser iT邦新手 5 級 ‧ 2020-08-17 15:01:52 檢舉

感謝解答,我還有一個問題,如果想用new set去寫的話,應該要怎麼寫?
這是我試著自己寫的code....顯然不成功...

  table = document.getElementById("myTable");
  tr    = table.getElementsByTagName("tr");
  var select = document.getElementById("filter");
    
var checkMap = {};

for (i = 0; i < tr.length; i++) {
   td = tr[i].getElementsByTagName("td")[0];
 
   //console.log(td);
   if (td) {
      txtValue = td.textContent || td.innerText;
     
      for(txtValue in checkMap){
        var mySet = new Set(checkMap);
      }
     
 console.log(mySet);

            var option = document.createElement("option");
            var    txt = document.createTextNode(txtValue);
            option.appendChild(txt);
            select.insertBefore(option,select.lastChild)

   }
}

amisser 這set用法不太對, 不應該一直在迴圈內重複宣告, 這樣每次都是新的.

可以把我原本寫的var checkMap = {}; 視同 var checkMap = new Set(); , 照這個邏輯改成checkMap的Set函式add() has() 之類的~

我要發表回答

立即登入回答