2017-02-01 17 views
1

のディープ比較はのは、私は2つの深いオブジェクトがあるとしましょう:のJavaScript(Lodash) - 二つのオブジェクト

var oldData = { 
    "id": 1, 
    "first_name": "Eric", 
    "last_name": "Henry", 
    "info": { 
    "email": "[email protected]", 
    "gender": "Male", 
    "ip_address": "7.11.169.150", 
    "age": 11 
    } 
}; 

var newData = { 
    "id": 2, 
    "first_name": "Tommy", 
    "last_name": "Henry", 
    "info": { 
    "email": "[email protected]", 
    "gender": "Male", 
    "ip_address": "7.11.169.150", 
    "age": 15 
    } 
}; 

はどのようにして、各オブジェクトをトラバースし、各異なる値の値を取得するにはlodash(またはJavaScript)を使用します、トップケースには、それはここで

[ 
    {old: 1, new: 2}, 
    {old: 'Eric', new: 'Tommy'}, 
    {old: '[email protected]', new: '[email protected]'}, 
    {old: 11, new: 15}, 
] 

になるので、私はこれまで持っているものです。

var oldData = { 
 
    "id": 1, 
 
    "first_name": "Eric", 
 
    "last_name": "Henry", 
 
    "info": { 
 
    "email": "[email protected]", 
 
    "gender": "Male", 
 
    "ip_address": "7.11.169.150", 
 
    "age": 11 
 
    } 
 
}; 
 

 
var newData = { 
 
    "id": 2, 
 
    "first_name": "Tommy", 
 
    "last_name": "Henry", 
 
    "info": { 
 
    "email": "[email protected]", 
 
    "gender": "Male", 
 
    "ip_address": "7.11.169.150", 
 
    "age": 15 
 
    } 
 
}; 
 

 
var diffObj = _.difference(_.keys(oldData), _.keys(newData)); 
 

 
console.log(JSON.stringify(diffObj, null, 4));
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

+2

可能な重複2つのオブジェクトの比較lodash?](http://stackoverflow.com/questions/31683075/how-to-do-a-deep-comparison-between-2-objects-with-lodash) –

+0

@AlaEddineJEBALIこれらの答えはありません私は助けが必要な解決策を提供する。 1番目の答え:深い比較ではない、2番目の答え:isEqualの比較、3番目の答え:動作していないようです。 – red

答えて

1

ソリューションカスタム再帰関数compareUserDataObject.keys()機能を使用して:深いを行う方法[の

var oldData = { "id": 1, "first_name": "Eric", "last_name": "Henry", "info": { "email": "[email protected]", "gender": "Male", "ip_address": "7.11.169.150", "age": 11 } 
 
}; 
 
var newData = { "id": 2, "first_name": "Tommy", "last_name": "Henry", "info": { "email": "[email protected]", "gender": "Male", "ip_address": "7.11.169.150", "age": 15 } 
 
}; 
 

 
function compareUserData(oldData, newData, result) { 
 
    Object.keys(oldData).forEach(function (k) { 
 
     if (typeof oldData[k] !== 'object') { 
 
      if (oldData[k] != newData[k]) this.push({'old': oldData[k], 'new': newData[k]}); 
 
     } else { 
 
      compareUserData(oldData[k], newData[k], this); 
 
     } 
 
    }, result); 
 

 
    return result; 
 
} 
 

 
var result = compareUserData(oldData, newData, []); 
 
console.log(result);

+0

ありがとう、私はこの1つを理解を使用して自分のソリューションを作成することができました。 – red

+1

@red、あなたは大歓迎です – RomanPerekhrest

0

オブジェクトのプロパティを繰り返し処理し、変更があった場合は手動でチェックすることができます。 あなたがプロパティに反復処理する方法を表示するには:Iterate through object properties

EDIT:あなたのオブジェクトのプロパティを入れ子にしている、あなたもいることを確認することができますどのように表示するには、この記事をお読みください。How do I check if an object has a property in JavaScript?

関連する問題