Comparar objetos em JavaScript

Ammar Ali 12 outubro 2023
  1. Compare objetos usando a função JSON.stringify() em JavaScript
  2. Compare objetos manualmente em JavaScript
Comparar objetos em JavaScript

Este tutorial discutirá como comparar objetos manualmente ou usando a função JSON.stringify() em JavaScript.

Compare objetos usando a função JSON.stringify() em JavaScript

Comparar variáveis ​​em JavaScript é relativamente fácil; precisamos apenas usar o operador de comparação === entre duas variáveis. As variáveis ​​podem ser de qualquer tipo de dados, como strings e inteiros.

O operador de comparação retorna um booleano, que pode ser true ou false dependendo das variáveis ​​que estão sendo comparadas. Por exemplo, vamos comparar duas variáveis ​​de um tipo de string usando o operador de comparação.

Veja o código abaixo.

var a = 'Apple';
var b = 'Apple';
console.log(a === b)

Produção:

true

Na saída, o booleano true indica que as duas variáveis ​​são idênticas. Da mesma forma, você também pode comparar números. Agora vamos falar sobre a comparação de objetos em JavaScript.

A comparação de objetos não é fácil porque eles contêm vários valores e também podem conter objetos dentro deles. O método rápido e fácil de comparar dois objetos é usar a função JASON.stringify(). A desvantagem deste método é que a ordem das propriedades importa em comparação.

Esta função compara a primeira propriedade de um objeto com a primeira propriedade do outro objeto e assim por diante. Se alterarmos a ordem das propriedades em um dos objetos, este método não funcionará. Por exemplo, vamos comparar dois objetos usando a função JSON.strigify().

Veja o código abaixo.

const fruit1 = {
  name: 'Apple',
  price: '2'
};
const fruit2 = {
  name: 'Apple',
  price: '2'
};
console.log(JSON.stringify(fruit1) === JSON.stringify(fruit2))

Produção:

true

Neste código, estamos comparando dois objetos contendo duas propriedades cada. Pela saída, os dois objetos são iguais. Agora, vamos alterar a ordem das duas propriedades em um objeto e, em seguida, compará-lo com o outro usando a função JSON.stringify().

Veja o código abaixo.

const fruit1 = {
  name: 'Apple',
  price: '2'
};
const fruit2 = {
  price: '2',
  name: 'Apple'
};
console.log(JSON.stringify(fruit1) === JSON.stringify(fruit2))

Produção:

false

Na saída, o resultado é false. Mudamos a ordem das propriedades do segundo objeto; esta é a desvantagem deste método.

Compare objetos manualmente em JavaScript

O método acima tem uma desvantagem, então podemos fazer nossa própria função para comparar dois objetos, de forma que não tenhamos que nos preocupar com a ordem das propriedades dos objetos.

Por exemplo, vamos fazer uma função para comparar os objetos acima em JavaScript. Veja o código abaixo.

function ObjCompare(obj1, obj2) {
  if (obj1.name === obj2.name && obj1.price === obj2.price) {
    return true;
  };
  return false;
}
const fruit1 = {
  name: 'Apple',
  price: '2'
};
const fruit2 = {
  price: '2',
  name: 'Apple'
};
console.log(ObjCompare(fruit1, fruit2))

Produção:

true

No código acima, fizemos a função ObjCompare(), comparando dois objetos de acordo com suas propriedades independentemente de sua ordem. A função retorna true apenas quando o nome e o preço dos dois objetos são iguais; caso contrário, ele retornará false.

Você também pode fazer sua própria função para comparar várias propriedades ou comparar uma propriedade que você gostaria de comparar de todas as propriedades disponíveis. Você também pode fazer outra função para comparar mais de dois objetos ao mesmo tempo.

Agora, considere que temos dois objetos com muitas propriedades e queremos comparar todas essas propriedades. Fazer esse tipo de função levará muito tempo.

Em vez disso, podemos usar a função Object.keys() para obter todas as chaves ou propriedades de uma função e compará-las usando um loop. Se todas as propriedades forem iguais, a função retornará true; caso contrário, ele retornará false.

Por exemplo, vamos fazer esta função e testá-la com os dois objetos acima. Veja o código abaixo.

function ObjCompare(obj1, obj2) {
  const Obj1_keys = Object.keys(obj1);
  const Obj2_keys = Object.keys(obj2);
  if (Obj1_keys.length !== Obj2_keys.length) {
    return false;
  }
  for (let k of Obj1_keys) {
    if (obj1[k] !== obj2[k]) {
      return false;
    }
  }
  return true;
}
const fruit1 = {
  name: 'Apple',
  price: '2',
  color: 'red'
};
const fruit2 = {
  price: '2',
  name: 'Apple',
  color: 'red'
};
console.log(ObjCompare(fruit1, fruit2))

Produção:

true

Neste programa, a primeira instrução if dentro da função ObjCompare() é usada para verificar o comprimento das propriedades ou chaves dentro dos dois objetos.

Se eles não forem iguais, a função retornará false e não se moverá para o loop. Este método funciona bem mesmo se alterarmos a ordem das propriedades ou as chaves de qualquer um dos objetos. Você também pode alterar esta função para comparar três ou mais objetos por vez.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Artigo relacionado - JavaScript Object

Artigo relacionado - JavaScript Boolean