Essa é uma pergunta realmente idiota, mas por favor me ajude a entender essa linha de código if (freq[char]). O que isso significa? Como uma variável pode estar em um array sem o método push()?
function removeDupl(arg) {
var answer = "";
var freq = [];
for (i = 0; i < arg.length; i++) {
let char = arg[i]
if (freq[char]) { <------- What does it mean ? what condition is that?
freq[char]++
console.log("Duplicate:"+ char)
} else {
freq[char] = 1
answer = answer + char
console.log("not a duplicate:"+char)
}
}
return answer;
}
A condição
freq[char]
é verdadeira se o elemento do array naquele índice existir e tiver um valor verdadeiro. Este array contém apenas números; eles começam em 1 e são incrementados para cada repetição, então se o elemento existir ele será verdadeiro (todos os números exceto0
eNaN
são verdadeiros).Você pode atribuir diretamente a um índice. Isso é feito neste código com:
no
else
bloco.Então o código faz um loop pelos valores no
arg
array. Se o valor já existir como um índice no array, o elemento do array é incrementado comfreq[char]++
. Caso contrário, um novo elemento é criado com esse índice e inicializado para1
.Observe que a mensagem
está incorreto. Isso será registrado na primeira vez que qualquer caractere for encontrado. Não se sabe naquele momento se é uma duplicata ou não, depende se há outra ocorrência depois.
Vou lhe dar uma solução muito simples e direta.
A condição freq[char] é avaliada como true se freq[char] for definido e tiver um valor verdadeiro (ou seja, não for undefined, null, 0, false ou uma string vazia). Neste contexto, freq está sendo usado como um array associativo (ou objeto) onde as chaves são caracteres e os valores são suas contagens. Se o arg fornecido para a função removeDupl(arg) for "Helloooooo" , o freq sairá como [ H: 1, e: 1, l: 2, o: 6 ]
Então, a condição if é executada se o caractere atual já estiver presente na matriz freq, caso contrário, a condição else é executada.