2017-09-02 1 views

答えて

2

代わりlodashやJavaScriptの、二つのオブジェクトの等価性をチェックするangularjsでの方法があります:以下のようangular.equals &を使用することができます。

angular.equals(newValue, oldValue); 

それはの角度自身の平等だとして、それが$に問題を持っていないチェック$ hashkeyはそれを処理します(チェックしないことで)。また、プロパティの値によってすべてのプロパティによって等価性がチェックされ、型チェックも行われます。

Plunker Example

2

のハッシュキーを除外します深い平等をチェックするために、任意のloadash関数またはJavaScript関数を提案します。この関数は、配列内のオブジェクトのすべてのプロパティを比較します。

var obj = [{ 'a': 1, b: 2 },{ 'a': 3, b: 4 }]; 
var other = [{ 'a': 1, b: 2 }, { 'a': 3, b: 4 }]; 

_.isEqual(OBJ、その他)。 // => true

両方の配列の要素が同じ順序である必要があることに注意することが重要です。これはfalseを返します:

var obj = [{ 'a': 1, b: 2 },{ 'a': 3, b: 4 }]; 
var other = [{ 'a': 3, b: 4 },{ 'a': 1, b: 2 }]; 

_.isEqualを(OBJ、その他)。 // => falseを同じ順序で持つ二つの配列を必要とする

UPDATE _.isEqualで

。あなたはこのように使用することができますあなたのケースでのでしかし、この秩序比較を克服するために、あなたは(sortByを使用して)、他のlodash機能を使用することができます。

_.isEqual(_.sortBy(obj, 'id'), _.sortBy(other, 'id')); 

これは最初の配列があるかどうかを確認した後、IDによって配列をソートします等しい。複数のプロパティでソートすることも、カスタム関数でソートすることもできます。

+0

この順番の比較を克服する方法はありますか? – Devendra

+0

idプロパティを持っていることに気づいたので、idでソートしてequals関数を適用したり、他のプロパティやカスタム関数でソートすることもできます。私はこの秩序だった比較をどのように克服できるかを示す答えを編集しました。 –

関連する問題