I want to compare two Json object arrays. One has more data. For the final result if one id finds another the selected checkbox = true. So far there are 4 and it only finds one. Do I loop through the long array first and then loop through the second array to find a match?
this.formAll = JSON.parse(response)
for (var i = 0; i < this.formAll.length; i++) {
for (var j = i; j < this.formAb.length; j++) {
console.log( this.formAb[j].id, this.formAll[i].SeriesNumber);
if ( this.formAll[i].id === this.formAb[j].id) {
console.log( 'small=', this.formAb[j].id, 'large=',
this.formAll[i].id );
this.formAll[i].selected = true;
}}
}
In Javascript/Typescript (If order of keys of both the objects are same) : Use
JSON.stringify(obj1) === JSON.stringify(obj2)
Object.entries(obj1).toString() === Object.entries(obj2).toString()
obj1 = { a:1, b:2 }
obj2 = { a:1, b:2 }
// true
obj1 = { a:1, b:2 }
obj2 = { b:2, a:1 }
// false
Using Lodash , irrespective of key's order
_.isEqual(obj1 , obj2 ); // true
Compare each keys of object individually
Fast and limited
JSON.stringify(obj1) === JSON.stringify(obj2)
Slow and more generic
Object.equals = function( x, y ) {
if ( x === y ) return true;
// if both x and y are null or undefined and exactly the same
if ( ! ( x instanceof Object ) || ! ( y instanceof Object ) ) return false;
// if they are not strictly equal, they both need to be Objects
if ( x.constructor !== y.constructor ) return false;
// they must have the exact same prototype chain, the closest we can do is
// test there constructor.
for ( var p in x ) {
if ( ! x.hasOwnProperty( p ) ) continue;
// other properties were tested using x.constructor === y.constructor
if ( ! y.hasOwnProperty( p ) ) return false;
// allows to compare x[ p ] and y[ p ] when set to undefined
if ( x[ p ] === y[ p ] ) continue;
// if they have the same strict value or identity then they are equal
if ( typeof( x[ p ] ) !== "object" ) return false;
// Numbers, Strings, Functions, Booleans must be strictly equal
if ( ! Object.equals( x[ p ], y[ p ] ) ) return false;
// Objects and Arrays must be tested recursively
}
for ( p in y ) {
if ( y.hasOwnProperty( p ) && ! x.hasOwnProperty( p ) ) return false;
// allows x[ p ] to be set to undefined
}
return true;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With