• react.png
  • angular.png
  • node.png
  • html5.png
  • php.png

Comparar si dos objetos son iguales en JavaScript

como.jpg

Cuando utilizamos los operadores de comparación estrictos === para hacer la comparación de si existe igualdad entre objetos o arrays nos damos cuenta que los objetos tanto como arrays y dates son comparados por su referencia, es decir, básicamente se checa si los objetos dados por referencia tienen la misma ubicación en memoria. Si un objeto y otro tiene la misma ubicación en memoria entonces la consola nos arrojara TRUE, de lo contrario nos arrojara FALSE.

 

Ejemplo:

// Objects like arrays, dates, and plain objects are compared by their reference.
// Basically checks to see if the objects given refer to the same location in memory. 

var object1 = {
	name: 'cristina',
	lastname: 'Rojas'
}

var object2 = {
	name: 'cristina',
	lastname: 'Rojas'
}

var callObject1 = object1;

// Output: FALSE - distinct instances
console.log(object1 === object2);

// Output: TRUE -  refer to the same instance.
console.log(callObject1 === object1);

Y si queremos comparar que dos objetos sean iguales en valor podemos hacer un código más profundo, por ejemplo:

// Check if the objects have the same numbers of properties.
// Check if the objects have the same values.
var object1 = {
	name: 'cristina',
	lastname: 'rojas'
} 

var object2 = {
	name: 'cristina',
	lastname: 'rojas'
}

function checkObjectValues(a, b){
	// Obtainging all the objects properties.
	var aProperties = Object.getOwnPropertyNames(a); 
	var bProperties = Object.getOwnPropertyNames(b); 

	console.log(aProperties.length); // 2 properties
	console.log(bProperties.length); // 1 propertie

	// If the number of properties are diferents then the objects are no equals.
	if (aProperties.length != bProperties.length) {
		return false;
	} 

	// If the objects have same numbers of properties 
	// We need to check if the properties values are the same
	for (var i = 0; i < aProperties.length; i++) {
		var saveNameProperty = aProperties[i]; // The name of the property name, lastname.

		if ( a[saveNameProperty] !== b[saveNameProperty]) { // The value of the property cristina, rojas.
return false;
		}
	}
	
	return true;
}

checkObjectValues(object1, object2);

@telecristy.

0/1000

Necesitas conectarte ó registrarte para comentar