2016-05-04 11 views
2

私は単純化するために配列を持ち、first、last、およびageの人を言うことができます。私は同じ名前、同じ姓と同じ年齢を持つすべての人の新しい配列を作りたいと思います。例えば、私の出発配列:私はこれを行う方法を見つけ出すために_.uniqで苦労していlodash javascript複数のパラメータに一致する重複配列

[ 
    {id: 1, first: 'fred', last: 'smith', age: 21}, 
    {id: 2, first: 'fred', last: 'smith', age: 21} 
] 

[ 
    {id: 1, first: 'fred', last: 'smith', age: 21}, 
    {id: 2, first: 'fred', last: 'smith', age: 21}, 
    {id: 3, first: 'tom', last: 'smith', age: 21}, 
    {id: 4, first: 'fred', last: 'smith', age: 32} 
] 

私は最後の/年齢/最初の一致重複を返したいです、どんな助けもありがとう。

+1

は '.reduce()'、あなたがやりたいだろうか?各項目を前の項目と比較し、一致する場合は後の項目を返しますか? – evolutionxbox

+0

2つのフレッドと2つのトムがある場合はどうなりますか?あなたは何を返すと思いますか? –

+0

@ Felipe Skinner、同じ姓名と年齢の2つのフレッドがある場合はそれらを含める必要があります。同じ姓と年齢の2つの拍手がある場合は、それらも含めてください。基本的に3つの基準。 – edencorbin

答えて

3

_.groupBy()を使用して値をグループ化することができます。値が重複していると判断した値でグループ化されていることを確認してください。 _.filter()それぞれの値は、蓄積された配列の長さでグループ化され、次に_.flatten()最終配列を得るために値がグループ化されます。

var data = [ 
 
    {id: 1, first: 'fred', last: 'smith', age: 21}, 
 
    {id: 2, first: 'fred', last: 'smith', age: 21}, 
 
    {id: 3, first: 'tom', last: 'smith', age: 21}, 
 
    {id: 4, first: 'fred', last: 'smith', age: 32} 
 
]; 
 

 
var result = _(data) 
 
    .groupBy(i => _(i).pick('first', 'last', 'age').values().value()) 
 
    .filter(i => i.length > 1) 
 
    .flatten() 
 
    .value(); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.11.2/lodash.js"></script>

+0

完璧に働きました、ありがとうございます。 – edencorbin

+0

私にあなたを紹介してくれてありがとうございます。 –

関連する問題