var str = "hello world";
var uniq = {};
var list = [];
var last = 0;
var resstr = ""
for(var i=0; i<str.length; i++){
let v = str[i];
if(uniq[v]){
list[uniq[v]-1] = true;
list[i] = true;
last = i;
}else{
uniq[v] = i+1;
}
}
if(last) list[last] = false;
for(var i=0; i<str.length; i++){
if(!list[i]) resstr+=str[i];
}
console.log(resstr); // he wrld
context=document.all.surface.getContext("2d");
document.all.surface
ищет канвас в родительском окне а должно в созданном, то есть вам надо как то передать GtWin в то место где вы берете контекст от канваса.choicesInit
у вас так же синхронная. соответственно await для нее тоже не нужен.choicesInit
. Для этого потребуется choicesInit
сделать асинхронной и возвращать из нее промис