2017-10-25 11 views
0

ノードに1対1の関係を持つオブジェクトの2つの配列があり、それらを効率的に照合したい場合は、よりクリーンな方法で以下を行ういくつかの関数がありますか?1対1の関係で配列を照合する効率的な方法

var users = [{id:1},{id:2}] 
var userDetails =[{userId:1, eyeColor:'red'},{userId:2, eyeColor:'blue'}] 

users.map((u)=>{ 
    userDetails.find((detail,index)=>{ 
     return u.id == u.userId ? u.eyeColor = userDetails.splice(index, 1)[0] : false; 
    }) 
}) 

答えて

1

あなたのコードは十分に簡素化されていると思います。別の方法としては、

var filteredArray = users.filter(function(first){ 
    return userDetails.filter(function(second){ 
     return first.id == second.userId; 
    }); 
}); 

またはあなたはあなたが投稿このコードは大きな配列のために、それは非常に非効率的、連続する各ユーザーのために、トラフの完全な出発アレイuserDetailsを行くだろう

+0

もっと簡単な方法のためにlodashライブラリを見てとることができ、フィルタを使用することができます。配列間に1対1の関係があることがわかっている場合、userDetails配列をスプライシングして連続する各ユーザーの検索を短くすることで検索を短くすることができます。それは私が効率的に書いた理由です:) –

+0

私はあまりにも、jsライブラリにも感謝のように思った。一致しない場合は、ネストされたループの伝統的な方法を使用して一致するレコードを見つけることができます。 – digit

+0

私たちは請願書を書く必要があります:) –

関連する問題