Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compare by two objects typescript angular6

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;
        }}
      }
like image 552
Sevensnake77787 Avatar asked Aug 28 '18 04:08

Sevensnake77787


2 Answers

In Javascript/Typescript (If order of keys of both the objects are same) : Use

  1. JSON.stringify(obj1) === JSON.stringify(obj2)
  2. 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

  1. Using Lodash , irrespective of key's order

    _.isEqual(obj1 , obj2 ); // true

  2. Compare each keys of object individually

like image 158
Ritu Gupta Avatar answered Oct 29 '22 00:10

Ritu Gupta


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;
}
like image 40
Thilina Sampath Avatar answered Oct 29 '22 00:10

Thilina Sampath