Ciao, non ho approfondito ma vedo due "evidenti" errori e qualche altra bad-practice.

Primo errore: in JavaScript, a differenza di altri linguaggi come VB, l'operatore di confronto uguaglianza è dato da un doppio uguale (==), o un triplo uguale (===) nel caso di uguaglianza rigorosa.

Il singolo uguale (=) invece è l'operatore di assegnazione.

Nella tua condizione quindi devi usare il doppio (o eventualmente il triplo) uguale, non quello singolo, altrimenti non fai altro che riassegnare un nuovo valore a valorecarta[k] per ogni iterazione e, in questo caso, il risultato di quella espressione (cioè il valore restituito da valorecarta[f], non il valore dato dal confronto) sarà considerato come valore di verifica.

Secondo errore: c'è un punto e virgola di troppo. In una istruzione "if" il punto e virgola non va messo tra la sua definizione (il blocco tra parentesi tonde) e il corpo (il blocco tra graffe).

Prova a correggere questi errori e vedi che succede.

Inoltre, un consiglio, meglio non abusare del metodo document.write(). Questo metodo infatti, se eseguito dopo che la pagina è completamente caricata, elimina l'intero HTML per rielaborare i dati indicati.
Forse non è il tuo caso, perché lo stai eseguendo all'apertura della pagina ma, se l'intento è giusto quello di includere al volo degli elementi nella pagina, sarebbe comunque preferibile usare altri sistemi come il metodo appendChild() o la proprietà innerHTML di un eventuale elemento contenitore predisposto per questo, o altri metodi analoghi.