ハッシュの配列をあるカラムをキーにしてマージしたい〜その2

 先ほどの処理をJavascript側でやってみる場合のロジック(超雑な)

var hash1 = [{user_id:1, name:'test'},{user_id:2, name:'test2'},{user_id:3, name:'test3'}];
var hash2 = [{id:2, note:'aabbcc'},{id:3, note:'ccddee'}];

var map = {};
hash2.forEach(function(val, key) {
    map[val.id] = val;
});

var merged = [];
hash1.forEach(function(val, key) {
    var tmp = {};
    tmp['user_id'] = val.user_id;
    tmp['name']    = val.name;
    if(map[val.user_id] !== undefined) {
        tmp['note'] = map[val.user_id]['note'];
    }
    merged.push(tmp);
});
console.log(merged);

 雑に説明すると、hash1とhash2という仮データを定義している。user_idとnameを持つハッシュの配列と、
idとnoteを持つハッシュの配列がある。これをuser_idとidとが一致すればマージする、というような事をやりたかったりする場合の
方法を雑に考えている。

var map = {};
hash2.forEach(function(val, key) {
    map[val.id] = val;
});

 このような感じで、idをキーにして値に元要素をいれておく。
すると、

hash1.forEach(function(val, key) {
    var tmp = {};
    tmp['user_id'] = val.user_id;
    tmp['name']    = val.name;
    if(map[val.user_id] !== undefined) {
        tmp['note'] = map[val.user_id]['note'];
    }
    merged.push(tmp);
});

こんな感じにmap[val.user_id]があるかどうかで、一致するキーがあるかどうかを判定できるわけだから、
一致すれば追加されるロジックを組むことができる。