Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

169
Visualizações
Finding value inside an object, that's within an array

I have two arrays I want to compare. The state of each object could be either true, false or null depending on what the user has selected.
I then want to compare the two arrays, and push the name of the activity into a separate array if they match each other.
If it compares the first one for example, which would be "free", and the user has checked this, making { free: true }, then this activity ("Go to the cinema") will not be pushed into the new array.

//user input
filtersChecked: [
    { free: null },
    { indoors: null },
    { city: null },
    { winter: null },
    { physical: null },
],

//compared against:

name: "Go to the cinema",
filters: [
    { free: false },
    { indoors: true },
    { city: true },
    { winter: null },
    { physical: false },
],

What I'm struggling with is comparing the "index" of the objects state if that makes any sense...
My attempt looks like this:

function checkFilter(index, isChecked) {
    if (isChecked) {
        model.input.filtersChecked[index] = true;
    } else if (!isChecked) {
        model.input.filtersChecked[index] = false;
    }
}

function suggestActivities() {
    let userFilters = model.input.filtersChecked;
    let activityFilters;
    let tempArray = [];

    for (let i = 0; i < model.data.activities.length; i++) {
        activityFilters = model.data.activities[i].filters;
        for (let j = 0; j < userFilters.length; j++) {
            if (userFilters[j] === activityFilters[j]) {
                tempArray.push(model.data.activities[i].name);
                console.log(tempArray);
                continue;
            }
        }
    }
    console.log(tempArray);
}

I hope it's detailed enough. Been stuck on this for way too long now.
Also worth a mention that I would like it to be vanilla JavaScript, since this is a school assignment. So no jQuery please!

Thank you in advance!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Here is a sample of how you could do this comparison, with the subproblems you could break it down into. Use it as a template with how to solve your assignment's problem. Let me know if it helps.

const userInput = [
    { free: null },
    { indoors: null },
    { city: null },
    { winter: null },
    { physical: null },
 ]

const compared = {
    name: "Go to movies"
    filters: [
       { free: false },
       { indoors: true },
       { city: true },
       { winter: null },
       { physical: false },
    ]
}
const tempArr = []

function compareObjects (userInput, compared) {
    //loop through userInput filters
    for (let i=0; i<userInput.length; i++){
       //grab key from current index of array (like "free", "indoors", etc)
       let key = Object.keys(userInput[i])[0]

        //compare stored filters with user filters
        //if not equal, we can stop searching through the filters entirely and exit the function,
        // since if one of them doesnt match, we wont push at all
        //Note, I can reuse the userInput key for the compared keys, because both arrays are of equal length. 
        //If they weren't the same length, the keys wouldn't match, and you would have to sort the array first
        //so the index order and keys matched for both inputs.   
        if(userInput[i][key] !== compared.filters[i][key]) return
    }
    // if we made it through this loop without exiting the function, we can 
    // push the name since it means they all matched
    tempArr.push(compared.name)
}

//call the function and pass in variables
compareObjects(userInput, compared)
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda