Compare values of 2 different arrays with JS

Asked

Viewed 816 times

5

I am trying to compare values of 2 different arrays, one of which already has numbers saved in it and the other is filled by the user, when I try to do IF to compare all values of one array with the other, it is returning "true" because it is only validating the first index of one array with the other.

When I made the comparison in this way: //(drawn[0,1,2,3,4,5] == nao_Sorteados[0,1,2,3,4,5]) it worked, but I want to do it by comparing Indice to Indice by loop.

       for (i = 0; i < nao_Sorteados.length; i++) {                 
        for (x = 0; x < sorteados.length; x++) {                      
            if (sorteados[x] == nao_Sorteados[i]) {
             alert("Parabéns, você acertou tudo");
             return;
               }
            }
        } alert("Infelizmente você errou");
     }
  • Imagine two arrays: [0, 2, 1] and [0, 1, 2]. Should the result of the comparison be positive or negative? That is, do you seek to be identical even in the position of the elements? (and another question: you only have 1 depth level or each element of the array can have sub-arrays?)

3 answers

6

There are several ways to compare data from an array.

Whereas you have a simple array, being only a vector without complex objects, we can for example create a function and make a for, comparing data based on the array index:

function comparaArrays(sorteados, nao_Sorteados) {
  if (sorteados.length != nao_Sorteados.length) {
    return false;
  }

  for (let i = 0; i < nao_Sorteados.length; i++) {                 
      if (sorteados[i] !== nao_Sorteados[i]) {
        return false;
    }
  }

  return true;
}

const array1 = [1, 2, 3, 4, 5, 6];
const array2 = [1, 2, 3, 4, 5, 6];

if (comparaArrays(array1, array2)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}

const array3 = [1, 2, 3, 4, 5];
const array4 = [1, 2, 3, 4, 6];

if (comparaArrays(array3, array4)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}

Note that if the arrays do not have the same size, I already consider that they are not equal.


Following the same previous logic, we can use the method every array, greatly shortening our code:

function comparaArrays(sorteados, nao_Sorteados) {
  if (sorteados.length != nao_Sorteados.length) {
    return false;
  }

  return nao_Sorteados.every( (value, index) => value === sorteados[index] );
}

const array1 = [1, 2, 3, 4, 5, 6];
const array2 = [1, 2, 3, 4, 5, 6];

if (comparaArrays(array1, array2)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}

const array3 = [1, 2, 3, 4, 5];
const array4 = [1, 2, 3, 4, 6];

if (comparaArrays(array3, array4)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}


We can also opt for a simple option by converting the array to string and comparing the results:

function comparaArrays(sorteados, nao_Sorteados) {
  return nao_Sorteados.toString() === sorteados.toString();
}

const array1 = [1, 2, 3, 4, 5, 6];
const array2 = [1, 2, 3, 4, 5, 6];

if (comparaArrays(array1, array2)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}

const array3 = [1, 2, 3, 4, 5];
const array4 = [1, 2, 3, 4, 6];

if (comparaArrays(array3, array4)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}


Obs: If you want to compare data independent of ordering, you could call the method sort before comparing the data:

function comparaArrays(sorteados, nao_Sorteados) {
  if (sorteados.length != nao_Sorteados.length) {
    return false;
  }

  sorteados.sort();
  return nao_Sorteados.sort().every( (value, index) => value === sorteados[index] );
}

const array1 = [1, 2, 3, 4, 5, 6];
const array2 = [6, 5, 4, 3, 2, 1];

if (comparaArrays(array1, array2)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}

It is valid to mention that the method sort will change the original array, if you do not want this to happen, you can use the method slice before the sort, thus creating a copy of the array, so the array sent to the function will not undergo any change:

function comparaArrays(sorteados, nao_Sorteados) {
  if (sorteados.length != nao_Sorteados.length) {
    return false;
  }
  
  const paraComparar = sorteados.slice().sort();

  return nao_Sorteados.slice().sort().every( (value, index) => value === paraComparar[index] );
}

const array1 = [1, 2, 3, 4, 5, 6];
const array2 = [6, 5, 4, 3, 2, 1];

console.log("Array antes: ", array2);

if (comparaArrays(array1, array2)) {
  console.log("Parabéns, você acertou tudo");
} else {
  console.log("Infelizmente você errou");
}

console.log("Array depois: ", array2);


Documentations:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length

2

There’s a very simple way to do this, if you’re not dealing with objects, just do it:

if(vetor1.toString() === vetor2.toString()){
  console.log('São iguais');
}else{
  console.log('Não são iguais');
}

0

thanks...worked out, I’m learning to program yet so I’m kind of ignorant on the subject still, maybe I missed more details on my part, I was able to make the code to validate using if (drawn.toString() === nao_Sorteados.toString()), that way, my complete code was like this:

<script>


         const sorteados = [10,55,48,30,22,60]
         const nao_Sorteados = []

         function validar(){       

          let max = 6;
            if(nao_Sorteados.length < max){
            alert("Por favor, insira todos os numeros");
            return;
                }

            for (i = 0; i < nao_Sorteados.length; i++) {
             for (x = 0; x < sorteados.length; x++) { //if(sorteio.indexOf(jogo[i]) > -1)                 
               if (sorteados.toString() === nao_Sorteados.toString()) {  //(sorteados[0,1,2,3,4,5] == nao_Sorteados[0,1,2,3,4,5])
                alert("Parabéns, você acertou tudo");
                return;
           }
        }

     }  alert("Infelizmente você errou");

   }

        function adicionar(){
         let max = 6;
         escolhido = document.getElementById('array2').value
                     document.getElementById('array2').value = ""

         if(escolhido == ""){
          alert("Digite um valor valido");
          return;
        }         

         for(let i=0;i<nao_Sorteados.length;i++){
          if(nao_Sorteados[i] == escolhido){
          alert("Esse numero ja foi escolhido");
             console.log(nao_Sorteados);
                        return;
                    }

                } nao_Sorteados.push(escolhido);
                  console.log(nao_Sorteados);


            //Não necessario o return pois é a ultima condição do codigo
               if (nao_Sorteados.length > max) {
               alert("Você ja escolheu todos os numeros");
               nao_Sorteados.pop(escolhido);
               console.log(nao_Sorteados);                 

            } 
        }

</script>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.