JSONオブジェクトの変更前と後の属性と値を特定します

限り、最初の記録の経験のために働く、いくつかの恥は、何らかの理由で、それは次のレコードが優れている、私たちは今、あまり話をしなかったと思います。
このような背景の需要は、私は、フォームを持っているということです、フォームオブジェクト等のアレイ、OBJ、STRを持って、私は、今、このフォームのフォーム項目の特定のデータが必要に列挙された項目を変更する変更、前と後を比較したときにフォームを保存し、変更を加えています特定のアクションをトリガーします。
ここに方法は次のとおりです。

  1  // 对比JSON数据
  2エクスポート関数equalsWithA(物体1、オブジェクト2){
   3    VARの changeField = []
   4    のためのVARのたpropName における物体1){
   5      であれば(!物体1 [たpropName] &&!オブジェクト2 [たpropName]){
   6は       継続
  7      }
   8      であれば(object1.hasOwnProperty(たpropName)!= object2.hasOwnProperty(たpropName)|| typeof演算物体1 [たpropName]!== typeof演算オブジェクト2 [たpropName]){
   9        changeField.push(たpropName)
 10       引き続き
11      }
 12の     場合(物体1 [たpropName] instanceofの{アレイ)
 13        であれば(!arrayEquals(物体1 [たpropName]、オブジェクト2 [たpropName])){
 14          changeField.push(たpropName)
 15          続行
16        }
 17      } そう なら [物体1(たpropName] instanceofのオブジェクト&&オブジェクト2 [たpropName] のinstanceof オブジェクト){
 18        であれば(!jsonEquals(物体1 [たpropName]、オブジェクト2 [たpropName])){
 19          changeField.push(たpropName)
 20が         続行
21       }
 22      } そう であればtypeof演算物体1 [たpropName] === 'string'は&& typeof演算オブジェクト2 [たpropName] === '列' ){
 23        のtry {
 24          VAR D1 = ''
 25          VAR D2 = ''
 26          であれば(たpropName .indexOf( '終了時間')> -1 || propName.indexOf( 'のStartTime')> -1 ){
 27            、D1 = は、FormatDate(物体1 [たpropName])
 28            、D2 = は、FormatDate(オブジェクト2 [たpropName])
 29          } {
 30            D1 =物体1 [たpropName]
 31            、D2 = オブジェクト2 [たpropName]
 32          }
 33  
34          であれば(D1 && D2){
 35            であれば(D1!= D2){
 36              // 日期类型
37              changeField.push(たpropName)
 38            }
 39が           続行
40          } さもなければ もし(物体1 [たpropName]!= オブジェクト2 [たpropName]){
 41            changeField.push(たpropName)
 42が           続行
43          }
 44        } キャッチ(E){}
 45      } そう 場合(物体1 [たpropName] =!オブジェクト2 [たpropName]){
 46        changeField.push(たpropName)
 47        続行
48      }
 49    }
 50    リターンchangeField
 51  }。
52  関数arrayEquals(物体1、オブジェクト2){
 53    であれば(object1.length!= object2.length){
 54      リターン 
55    }
 56    object1.sort()
 57    object2.sort()
 58    のためのVARI = 0; 私はobject1.lengthを<; 私は++ ){
 59      であればtypeof演算物体1 [I]!== typeof演算オブジェクト2 [I]){
 60        リターン 
61      }
 62      であれば(物体1 [i]がinstanceofのアレイ&&オブジェクト2 [i]のinstanceofのアレイ){
 63        であれば(!arrayEquals(オブジェクト1 [i]は、オブジェクト2 [I])){
 64          リターン 
65        }
 66      } 他の 場合 isJson(オブジェクト1 [I])&&(isJson(object2は[I])){
 67        もし(!jsonEquals(物体1 [i]は、オブジェクト2 [I])){
 68          リターン 
69        }
 70      } そう であれば(物体1 [I] =!オブジェクト2 [I]){
 71        リターン 
72      }
 73    }
 74    リターン 
75  }。
76  関数jsonEquals(物体1、オブジェクト2){
 77    のためのvarたpropName における物体1){
 78      場合(!物体1 [たpropName] &&!オブジェクト2 [たpropName]){
 79は       引き続き
80      }
81      であれば(object1.hasOwnProperty(たpropName)!= object2.hasOwnProperty(たpropName)|| typeof演算物体1 [たpropName]!== typeof演算オブジェクト2 [たpropName]){
 82        リターン 
83      }
 84      であれば(物体1 [たpropName] instanceofのアレイ){
 85        であれば(!arrayEquals(物体1 [たpropName]、オブジェクト2 [たpropName])){ 戻り }
 86      } そう であれば(isJson(物体1 [たpropName])){
 87        であれば(!jsonEquals(物体1 [たpropName]、オブジェクト2 [たpropName] )){ 戻り }
 88     } そう であればtypeof演算物体1 [たpropName] === 'string'は&& typeof演算オブジェクト2 [たpropName] === '列' ){
 89        のtry {
 90          VAR D1 = ''
 91          のvar D2 = ''
 92          であれば(propName.indexOf ( '終了時間')> -1 || propName.indexOf( 'のStartTime')> -1 ){
 93            、D1 = は、FormatDate(物体1 [たpropName])
 94            、D2 = は、FormatDate(オブジェクト2 [たpropName])
 95          } {
 96            D1 = オブジェクト1 [たpropName]
 97           D2 = オブジェクト2 [たpropName]
 98          }
 99          であれば(D1、D2 && && D1!= D2){
 100            // 日期类型
101            リターン 
102          } そう であれば(物体1 [たpropName]!= オブジェクト2 [たpropName]){
 103            リターン 
104          }
 105        } キャッチ(E){}
 106      } そう であれば(物体1 [たpropName]!= オブジェクト2 [たpropName]){
 107        リターン 
108      }
 109    }
110    リターン 
111  }。
112  機能isJson(OBJ){
 113    VARの isjson = typeof演算(OBJ)=== 'オブジェクト' && Object.prototype.toString.call(OBJ).toLowerCase()== '[オブジェクトのオブジェクト]' &&!obj.length
 114    リターンisjson
 115 }

メソッドを呼び出します

   VAR arrChange = equalsWithA(oldFormData、newFormData)。   

おすすめ

転載: www.cnblogs.com/xiami2104/p/11783104.html