Executando verificação de segurança...
1

Você apenas não está salvando essa Array :). Então cada vez que a função roda ela gera uma nova array e faz apenas uma alteração.

Para resolver isso você pode ter uma abordagem muito simples, que seria passar a array como parâmetro da função, ou para manter funcionando da mesma forma, utilizar uma closure ou classe para salvar o estado da array.

Carregando publicação patrocinada...
1
1

Primeira solução:

const numberArray = Array.from({ length: 60 }, (_, i) => ({ value: i, active: false }))

function retornaNumerosSorteados(array: number[], numbers: number) {
  return array.map(item => ({
      ...item,
      active: item.value == numbers
    })
}

retornaNumerosSorteados(numberArray, 10)
retornaNumerosSorteados(numberArray, 14)

Segunda solução (funciona quase igual a classes):

function sorteiaNumeros() {
  const numberArray = Array.from({ length: 60 }, (_, i) => ({ value: i, active: false }))
  
  return (numbers: number) => numberArray.map(item => ({ ...item, active: item.value === numbers }))
}

const retornaNumerosSorteados = sorteiaNumeros()

retornaNumerosSorteados(10)
retornaNumerosSorteados(14)
1

O irmão muito obrigado por disponibilizar do seu tempo e sabedoria.

Que linda essa segunda forma, eu não conhecia esse conceito <3!

Grato!

1
1

Claro, é um erro muito simples que eu não meu atentei.
Ao utilizar a função map nós não mexemos na array original, apenas retornamos uma nova com os novos valores. A abordagem correta é a seguinte:

function sorteiaNumeros() {
  const numberArray = Array.from({ length: 60 }, (_, i) => ({ value: i + 1, active: false }))
  
  return (numbers: number) => {
    numberArray.forEach(item => {
      item.active = item.active || item.value === numbers
    })
    
    return numberArray
  }
}

Basicamente com o forEach nós temos o comportamento contrário, não retornamos nada mas conseguimos alterar os valores da array original.

1
1

TS não é minha especialidade, mas consigo ver erros nas respostas sugeridas.
A primeira solução está tipando array: number[] porém a 'array' seria do tipo '{}[]' ou seja, uma array de objetos.

A segunda solução tem 2 erros. Ambos ocorrem no seu código.
1 - A array de objetos está sendo inicializada dentro da função, logo, cada vez que você chamar a função, todos os números serão criados novamente de forma inativa, não há memória salvando os que foram ativados.
2 - Na ativação está sendo feito active: item.value === numbers, ou seja, mesmo se a função "decorasse" que o 10 já foi ativado, quando fosse a interação do 14, essa comparação retornaria FALSE, o que desativaria o 10 novamente.

O código abaixo eu fiz num editor online e funcionou:

function sorteiaNumero(numberArray: {value: number, active: boolean}[], numbers: number) {
            const newArray = numberArray.map(item => {
                return {
                    ...item,
                    active: item.active? true : item.value === numbers
                }
            })
            console.log(newArray);                
            return newArray
        }
        let numberArray = Array.from({ length: 60 }, (_, i) => ({ value: i, active: false }))


numberArray = sorteiaNumero(numberArray, 10)
numberArray = sorteiaNumero(numberArray, 14)

Repare que eu crio o 'numberArray' fora do escopo da função, e cada vez que eu chamo a função eu reatribuo os valores da 'numberArray', dessa forma, fica memorizado o número que foi ativado anteriormente.

Provavelmente dá pra refatorar, eu fiz "na pressa", mas acho que te atende por hora.

1

Obrigado pela explicação irmão, com certeza irei estudar suas dicas!

Fico agradecido por disponibilizar do seu tempo em ajudar o próximo!

Que Deus te abençoe!