程式碼在這裡
如題,請問怎樣移除重複的選項?
我在想是不是要再建立一個for迴圈去創建新的陣列....之類的
假設你的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)
}
}
}
感謝解答,我還有一個問題,如果想用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()
之類的~