Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Porque esse array retorna vazio?

Olá, as funções estão funcionando, entretanto não consigo pegar o resultado da primeira função, e colocar dentro de array vazio e chamar na segunda função para ordena-los e retirar os duplicados. Alguém conseguiria me ajudar?

let campo = document.querySelector("input")
let but = document.querySelector("button")
let numeros
let numerosSeparados = []
let list = numerosSeparados

but.onclick = executeTwo

function executeTwo(){
    getNumbers()
    getList()
}
//console.log(executeTwo)

function getNumbers() {
    numeros = (campo.value).split('')
    for (let k = 0; k < numeros.length; k++) {
        numerosSeparados.push(parseInt(numeros[k]))
    }
    console.log(numerosSeparados)
}

function getList(){
    let store = [...new Set(list)] //Get tha list and remove the duplicates

    for(let i = 0; i < store.length; i++){ //Performs the ordering of numbers in an ascending way
        for(let j = 0; j < store.length; j++){
            if(store[i] < store[j]){
                let temp = store[i]
                store[i] = store[j]
                store[j] = temp
            }
        }
    }
    return store
}
//console.log(getList())
2 respostas
solução!

Grande Marcelo, vamos lá. Eu acho que o primeiro ponto é: existe algum motivo para você criar as variáveis globais?

Se o que você precisa é pegar os números que foram digitados, remover os duplicados e ordenar o array final, uma sugestão seria:

let campo = document.querySelector("input")
let botao = document.querySelector("button")

botao.onclick = () => {

    // aqui o .split('') retorna o array de strings
    // e o .map() já devolve o mesmo array, mas com os números convertidos para inteiro
    const todosOsNumeros = (campo.value).split('').map(numero => parseInt(numero))
    // aqui a gente usa o new Set para remover os duplicados, e chama o método de ordenação do array 
    const numerosUnicos = [...new Set(todosOsNumeros)].sort((a, b) => a - b)

    console.log(numerosUnicos)
}

Tem um curso muito bacana sobre arrays, olha só.

Antes a gente realmente tinha de fazer ordenação e transformação (parseInt, por exemplo) na mão, mas agora existem formas mais simples de fazer isso.

De qualquer forma, o seu código está funcionando. O seu método getList() retorna o valor que você deseja. Basta você armazenar o retorno em algum lugar, algo mais ou menos assim:

let campo = document.querySelector("input")
let but = document.querySelector("button")
let numeros
let numerosSeparados = []
let list = numerosSeparados

but.onclick = executeTwo

function executeTwo(){
    getNumbers()
    const resultado = getList()
    console.log(resultado)
}

function getNumbers() {
    numeros = campo.value.split('')
    for (let k = 0; k < numeros.length; k++) {
        numerosSeparados.push(parseInt(numeros[k]))
    }
}

function getList(){
    let store = [...new Set(list)] //Get tha list and remove the duplicates

    for(let i = 0; i < store.length; i++){ //Performs the ordering of numbers in an ascending way
        for(let j = 0; j < store.length; j++){
            if(store[i] < store[j]){
                let temp = store[i]
                store[i] = store[j]
                store[j] = temp
            }
        }
    }
    return store
}

Bons estudos e vida longa e próspera!

Depois de meses, agradeço pelo apoio.