2016-05-02 17 views
0

ローカルのjavascriptオブジェクトとangular $ getで取得した別のjavascriptオブジェクトを深く比較するのにLodash _.isEqualを使用しています。角度で定義されたコンストラクタのため、Lodash isEqualが失敗する

$get({...}, function (data) { 

    cleanupAngularProps(data); 

    if (_.isEqual(data, {name: 'Someone'}) { 
    ... 
    } 
}); 

が、今、それを次のようにそれを少しchaging(予想通り)、彼らは同じであることを述べている:

このコードは、オブジェクトが異なっていることを述べている

$get({...}, function (data) { 

    cleanupAngularProps(data); 

    if (_.isEqual(JSON.parse(JSON.stringify(data)), {name: 'Someone'}) { 
    ... 
    } 
}); 

は私がにデバッグLodashのコードと両方のオブジェクトは異なるコンストラクタを持っているので失敗するようです。

データを複製しないでこれを解決するにはどうすればよいですか?

+1

JSON.parseも – elclanrs

+0

...機能を取り除くために起こっていることは、元の 'data'は機能が含まれている可能性がありますが、あなたは' JSON.parse(JSON.stringify(データ)を行うときに 'あなたが作成そのため、最初のケースでは 'isEqual'はfalseを返します。 – alexmac

+0

' cleanupAngularProps'とは何ですか?angularjs $ httpからPOJOと生JSONを取得できるはずです –

答えて

0

これは良い習慣であるかどうかはわかりませんが、プロトタイプをリセットしてコンストラクタを解決して解決しました。

$get({...}, function (data) { 

    cleanupAngularProps(data); 

    data.__proto__ = Object.prototype; 

    if (_.isEqual(data, {name: 'Someone'}) { 
    ... 
    } 
}); 
関連する問題