2017-09-05 17 views
2

2つのオブジェクトを比較し、どのプロパティが不足しているかを調べる必要があります。 オブジェクトはかなり大きく、いくつかのレベルです。JSの2つのオブジェクトのプロパティを比較します

私は、オブジェクトの種類の簡単な例を与える:

UC = {}; 
    UC.start = {} 
    UC.start.enableHardEccDecline = ''; 
    UC.start.template = {}; 
    UC.start.template.ecc = ''; 
    UC.start.template.decline = {}; 
    UC.start.template.decline.title = ''; 
    UC.start.template.decline.body = ''; 
    UC.general = {};... 

だからこれは、例えば、オブジェクトです。私が比較する必要があるのは単なるプロパティです。私はその価値を気にしません。私はこのオブジェクトを非常によく似たものと比較しますが、いくつかのプロパティが欠落している可能性があります。

+0

この比較で何をしていますか?私たちはあなたのニーズに基づいたソリューションを提供するのを手伝ってくれますし、あなたの最終目標に関するもう少し情報が役立ちます。 –

+2

これをnレベルチェックすると思いますか? – Amit

+0

したがって、1つのオブジェクトがサーバーから送信され、htmlコンテンツで使用される複数の文字列を持ちます。プロパティのいくつかが不足している場合、コードを停止し、エラーページを表示し、不足しているすべてのプロパティを表示する必要があります –

答えて

2

function compare(base, compared, deepSearch) { 
 
    var missing = []; 
 

 
    var compareProp = function (baseValue, comparedValue, path, deepSearch) { 
 
    //console.log('comparing', path.join('.')); 
 

 
    if (comparedValue === undefined) { 
 
     console.log('missing key', path.join('.')); 
 

 
     if (!deepSearch) { 
 
      return; 
 
     } 
 
    } 
 

 
    if (typeof baseValue === 'object') { 
 
     Object.keys(baseValue).forEach(function (key) { 
 
     compareProp(baseValue [key], comparedValue && comparedValue [key], path.concat(key), deepSearch); 
 
     }); 
 
    } 
 
    }; 
 

 
    Object.keys(base).forEach(function (key) { 
 
    compareProp(base [key], compared [key], [key], deepSearch); 
 
    }); 
 
} 
 

 
UC = {}; 
 
UC.start = {} 
 
UC.start.enableHardEccDecline = ''; 
 
UC.start.template = {}; 
 
UC.start.template.ecc = ''; 
 
UC.start.template.decline = {}; 
 
UC.start.template.decline.title = ''; 
 
UC.start.template.decline.body = ''; 
 
UC.general = {}; 
 

 
compare (UC, {}, true);

+0

ありがとう、これは私のニーズに正確に動作します:) –

-2

あなたの状況がそれを可能にした場合、私はhttp://underscorejs.org/ライブラリを使用することをお勧めではなく、独自のソリューションを転がり(またはその実装を見に行く)と思います。 JSでは深いオブジェクトの比較は時々簡単ではありません。 独自のソリューションをロールバックする場合は、プロパティを反復して繰り返して比較します(ネイティブ/組み込みオブジェクトのプロパティを無視し、おそらくプロトタイプから継承します)。

お望みならば喜んで詳しく説明します。

0

私はちょうどあなたがこれを適用する方法を正確に確認してください、ここでは簡単な例ではなくなりましたが、私はそれをログに記録されたアレイに不足している項目を追加しました。

Obj1は標準比較オブジェクト、obj2は要求から受け取ったオブジェクトである必要があります。

var obj1 = {}; 
obj1.test1 = 0; 
obj1.test2 = 0; 
obj1.test2222 = 0; 
obj1.testLoremIpsum = 0; 
obj1.lalala = 0; 

var obj2 = {}; 
obj2.test1 = 0; 
obj2.test25 = 0; 
obj2.lalala1 = 0; 

var k , i = 0; 
var missingProps = []; 

for(i in obj1) 
{ 
    var isFound = false; 
    for(k in obj2) if(i == k) isFound = true; 
    if(!isFound) missingProps.push(i); 
} 
console.log(missingProps); 
+0

このコードは1レベル深く。データの例にはさらにレベルがあります。 –

+0

本当に、私は気付かなかった。変更されます。ありがとう! – gugateider

関連する問題