Compare objects in Angular

前端 未结 4 1613
情歌与酒
情歌与酒 2020-12-04 13:59

Is it possible to do a \"deep\" comparison of two object in Angular? What I would like to do is compare each key/value pair. For example:

Object 1

{
         


        
相关标签:
4条回答
  • 2020-12-04 14:41

    Bit late on this thread. angular.equals does deep check, however does anyone know that why its behave differently if one of the member contain "$" in prefix ?

    You can try this Demo with following input

    var obj3 = {}
    obj3.a=  "b";
    obj3.b={};
    obj3.b.$c =true;
    
    var obj4 = {}
    obj4.a=  "b";
    obj4.b={};
    obj4.b.$c =true;
    
    angular.equals(obj3,obj4);
    
    0 讨论(0)
  • 2020-12-04 14:54

    Assuming that the order is the same in both objects, just stringify them both and compare!

    JSON.stringify(obj1) == JSON.stringify(obj2);
    
    0 讨论(0)
  • 2020-12-04 15:01

    I know it's kinda late answer but I just lost about half an hour debugging cause of this, It might save someone some time.

    BE MINDFUL, If you use angular.equals() on objects that have property obj.$something (property name starts with $) those properties will get ignored in comparison.

    Example:

    var obj1 = {
      $key0: "A",
      key1: "value1",
      key2: "value2",
      key3: {a: "aa", b: "bb"}
    }
    
    var obj2 = {
      $key0: "B"
      key2: "value2",
      key1: "value1",
      key3: {a: "aa", b: "bb"}
    }
    
    angular.equals(obj1, obj2) //<--- would return TRUE (despite it's not true)
    
    0 讨论(0)
  • 2020-12-04 15:05

    To compare two objects you can use:

    angular.equals(obj1, obj2)

    It does a deep comparison and does not depend on the order of the keys See AngularJS DOCS and a little Demo

    var obj1 = {
      key1: "value1",
      key2: "value2",
      key3: {a: "aa", b: "bb"}
    }
    
    var obj2 = {
      key2: "value2",
      key1: "value1",
      key3: {a: "aa", b: "bb"}
    }
    
    angular.equals(obj1, obj2) //<--- would return true
    
    0 讨论(0)
提交回复
热议问题