2017-01-02 6 views
0

Как можно фильтровать текущие данные:Lodash фильтр уникальные документы

[{ 
    key: 'T1', 
    legs:[{ fno: 'W321',date: '2017-01-02 18:20:00.000+0200'}], 
    fare: { type: 'B', price: 25 } 
},{ 
    key: 'T1', 
    legs:[{ fno: 'W321', date: '2017-01-02T18:20:00.000+0200'}], 
    fare: { type: 'E', price: 23 } 
},{ 
    key: 'T1', 
    legs:[{ fno: 'W321', date: '2017-01-02T18:20:00.000+0200'}], 
    fare: { type: 'E', price: 20} 
}] 

Я хочу группе legs[0].fno, legs[0].date и fare.type, и держать самые низкие цены на товары в каждой группе. Это ожидаемый результат:

[{ 
    key: 'T1', 
    legs:[{ fno: 'W321',date: '2017-01-02T18:20:00.000+0200'}], 
    fare: { type: 'B', price: 25} 
},{ 
    key: 'T1', 
    legs:[{ fno: 'W321',date: '2017-01-02T18:20:00.000+0200'}], 
    fare: { type: 'E', price: 20} 
}] 
+0

удалить высокая цена внутри того же legs.fno и legs.date и fare.type записи –

+0

те же legs.fno, legs.date и fare.type –

ответ

0

Использование _.groupBy() с обратным вызовом для создания строки в группе, затем _.map() каждую группу к одному объекту с помощью _.minBy():

var data = [{"key":"T1","legs":[{"fno":"W321","date":"2017-01-02 18:20:00.000+0200"}],"fare":{"type":"B","price":25}},{"key":"T1","legs":[{"fno":"W321","date":"2017-01-02T18:20:00.000+0200"}],"fare":{"type":"E","price":23}},{"key":"T1","legs":[{"fno":"W321","date":"2017-01-02T18:20:00.000+0200"}],"fare":{"type":"E","price":20}}]; 
 

 
var result = _(data) 
 
    // group by the combined group keys 
 
    .groupBy(function(o) { 
 
    // extract all group keys and join them to a string 
 
    return _.at(o, ['key', 'legs[0].date', 'fare.type']).join(''); 
 
    }) 
 
    .map(function(group) { 
 
    // get the object object with the minimum fare.price 
 
    return _.minBy(group, 'fare.price'); 
 
    }) 
 
    .value(); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+1

Как насчет замены функции уменьшения j ust простым _.minBy? Сохраняет пару строк. –

+0

Спасибо @MauritsRijk за идею '_.minBy()'. Я обновил ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^