2017-09-13 2 views
0

2つのJSONオブジェクトをマージする必要があります。値の比較によるJSONオブジェクトのマージ

まずオブジェクト:

var objectA = { 
    "UUID1": { 
    "user": { 
     "ID": "1" 
    } 
    }, 
    "UUID2": { 
    "user": { 
     "ID": "2" 
    } 
    }, 
    "UUID3": { 
    "user": { 
     "ID": "3" 
    } 
    } 
} 

第二の目的:

var objectB = { 
    "UUID4": { 
    "user": { 
     "ID": "4" 
    } 
    }, 
    "UUID5": { 
    "user": { 
     "ID": "3" 
    } 
    }, 
    "UUID6": { 
    "user": { 
     "ID": "2" 
    } 
    } 
} 

期待される結果:

{ 
    "UUID1": { 
    "user": { 
     "ID": "1" 
    } 
    }, 
    "UUID2": { 
    "user": { 
     "ID": "2" 
    } 
    }, 
    "UUID3": { 
    "user": { 
     "ID": "3" 
    } 
    }, 
    "UUID4": { 
    "user": { 
     "ID": "4" 
    } 
    } 
} 
トリックがある

は、UUIDは異なりますが、主キーは、ユーザーでありますID。だから、私はユーザーIDを比較し、1つだけのUUIDを保持する必要があります。

これにアプローチする方法は賢明ですか? Object.keys(objectX).forEachを使用して、ネストされたループはうまく私のために動作しませんでした:(

はありがとう

+0

あなたはhttps://stackoverflow.com/q/9134649/3365113 – TechGirl

+0

はい、私はjQueryのを使用することはできません、私は怖いてみました。 – flaesh

答えて

1

あなたはあなたのためだけにこれを処理するためにカスタム関数を作成することができ、このような何か:!。

var objectA = { 
 
    "UUID1": {"user": {"ID": "1"}}, 
 
    "UUID2": {"user": {"ID": "2"}}, 
 
    "UUID3": {"user": {"ID": "3"}} 
 
} 
 

 
var objectB = { 
 
    "UUID4": {"user": {"ID": "4"}}, 
 
    "UUID5": {"user": {"ID": "3"}}, 
 
    "UUID6": {"user": {"ID": "2"}} 
 
} 
 

 
function merge() { 
 
    var result = {}; 
 
    var ids = []; 
 
    for (var i = 0; i < arguments.length; i++) { 
 
    for (var uuid in arguments[i]) { 
 
     if (~ids.indexOf(arguments[i][uuid].user.ID)) { 
 
     continue; 
 
     } 
 
     result[uuid] = arguments[i][uuid]; 
 
     ids.push(arguments[i][uuid].user.ID); 
 
    } 
 
    } 
 
    return result; 
 
} 
 

 
var merged = merge(objectA, objectB); 
 
console.log(merged);

+0

ありがとう、私は最終的に私の問題を解決するためにこのバージョンを使用しました! – flaesh

+0

あなたは大歓迎です、それはあなたを助けてくれてうれしいです:) – codtex

1

挿入されたIDを記憶し、指定されたオブジェクトから新しいオブジェクトを構築するためのハッシュテーブルを取ることができます。

var objectA = { UUID1: { user: { ID: "1" } }, UUID2: { user: { ID: "2" } }, UUID3: { user: { ID: "3" } } }, 
 
    objectB = { UUID4: { user: { ID: "4" } }, UUID5: { user: { ID: "3" } }, UUID6: { user: { ID: "2" } } }, 
 
    hash = Object.create(null), 
 
    result = [objectA, objectB].reduce(function (r, o) { 
 
     Object.keys(o).forEach(function (k) { 
 
      if (!hash[o[k].user.ID]) { 
 
       hash[o[k].user.ID] = true; 
 
       r[k] = o[k]; 
 
      } 
 
     }); 
 
     return r; 
 
    }, {}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

偉大な答え、あまりにも!悲しいことに、私は1つだけ「答えた」と受け入れることができ、@codtexは彼のほんの少し速かった。どうもありがとう! – flaesh

関連する問題