2016-06-21 6 views
2

私は配列を持っている:どのように2つの配列を検索し、一致するものが見つかるか?

[{type:'blah',uid:3435},{type:'blah2',uid:3}] 

私はで終わるしたい:私は別の配列持ち

[{name:'blah',id:1},{name:'blah2',id:3}] 

[{newname:'blah2',uidid:3}] 

をあなたは、私は2つのベースと一致するようにしたい見ることができますid = uidのマッピングで。本当にjsでこれを行う方法を見つけるために苦労している。私はunderscoreをインストールしました。

+0

PHPJSが機能してことができます 'array_combine()'と 'array_intersection()'。ロングライブphpjs! –

+0

あなたは 'id'と' uid'に基づいてマッチしたいですか? – thefourtheye

+0

はい、これがPHPの場合 – Exitos

答えて

1

あなたは最初の配列とハッシュテーブルを構築し、二番目の配列の反復でそれを使用することができます。

var array1 = [{ name: 'blah', id: 1 }, { name: 'blah2', id: 3 }], 
 
    array2 = [{ type: 'blah', uid: 3435 }, { type: 'blah2', uid: 3 }], 
 
    hash = Object.create(null), 
 
    match = []; 
 

 
array1.forEach(function (a) { 
 
    hash[a.id] = a; 
 
}); 
 

 
array2.forEach(function (a) { 
 
    hash[a.uid] && match.push({ newname: a.type, uidid: a.uid }); 
 
}); 
 

 
console.log(match);

1

異なるキー名を使用するオブジェクトを持つ配列を使用したいので、このようなものが動作します。複雑な構文やロジックがなくても、読みやすく、理解しやすいです。

var arr1 = [{name: 'blah', id: 1}, {name: 'blah2', id: 3}]; 
 
var arr2 = [{type: 'blah', uid: 3435}, {type: 'blah2', uid: 3}]; 
 

 
var arr3 = []; 
 

 
arr1.forEach(function(obj1, i) { 
 
    arr2.forEach(function(obj2) { 
 
    if (obj1.id == obj2.uid) { 
 
     arr3.push({newname: obj1.name, uidid: obj1.id}) 
 
    } 
 
    }) 
 
}); 
 

 
console.log(arr3);

+0

これは正解ですが、ハリスマップの仕組みがいつも不思議に思っていたので、もう少しNinasから学びました。 – Exitos

関連する問題