JSonCmp-JavaScriptで正しく比較する

JSonでシリアル化されたJavaScriptオブジェクトは次のとおりです。



var source1 = '[{"vConfig":{"vType":"objectview","serverItemType":"TrackerObject"}}]';
      
      







そして、これもJSonでシリアル化された別のJavaScriptオブジェクトです。



 var source2 = '[{"vConfig":{"serverItemType":"TrackerObject","vType":"objectview"}}]';
      
      







それらは同じ構造、同じパラメーター、これらのパラメーターの同じ値を持っています。 すべての表示で、 source2



source2



同じことがありsource2







しかし、もちろんJavaScriptインタープリターは私たちに同意しません。 そして彼は、source1とsource2は異なる文字列であると合理的に信じています。 そして、それらを逆シリアル化して戻すと、異なるメモリアドレスにある2つのオブジェクトを取得します...また、互いに等しくありません。



また、さらにExt.jsを使用して、クラスをrousしみなく生成し、jSonを忘れない場合、完全な日食に到達できます。 JSonsで収集されるコントロールに関するこれらの膨大な情報の比較方法は? または、各フィールドで他のサブフィールドがすでに再作成されているツリーのようなオブジェクトを整理しますか?



解決方法は1つしかありません。値ではなく、メモリ内のセルではなく、より柔軟に比較する方法を見つける必要があります。 Equalは、 同じフィールドに同じ値が含まれるオブジェクトと見なされる必要があります 。 この観点から、 source2



source1



間違いなくsource2



と等しくなりsource2







そして、次の自転車が生まれました-JSonCmp 。 JavaScriptでオブジェクトを比較するためのシンプルで非常に便利な関数。 もちろん、これを書くための多くの試みを見つけましたが、各実装は問題の一部のみを解決しました-結果として、私はすべての興味深いアイデアを1つにまとめ、同時に私のものをいくつか追加しました...



使い方は簡単です-jsoncmp.jsを接続してから呼び出します:



 jSonCom(object1, object2);
      
      







オブジェクトに同じ情報が含まれている場合、関数はtrueを返します。 それ以外の場合、false。



Ext.jsユーザーは同じアルゴリズムを使用できますが、プラグインラッパー-jsoncmp.ext.jsで使用できます。 コードは次のようになります。



 Ext.ux.util.Object(object1, object2);
      
      







比較規則は次のとおりです。





これが小さく、おそらく不完全な機能であることを願っていますが、作業を簡素化するでしょう。



All Articles