限り、最初の記録の経験のために働く、いくつかの恥は、何らかの理由で、それは次のレコードが優れている、私たちは今、あまり話をしなかったと思います。
このような背景の需要は、私は、フォームを持っているということです、フォームオブジェクト等のアレイ、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)。