我们假设我们有一系列产品,如下所示,产品按名称排序,然后按价格排序。
如何使用lodash获得每个类别中最便宜的产品或最昂贵的产品?
我们需要filterfirst
和filterlast
函数。
[
{
"productId": "123456",
"name": "Daiper",
"category": "Home",
"store": "store1",
"pricing": 10
},
{
"productId": "123457",
"name": "Daiper",
"category": "Home",
"store": "store2",
"pricing": 20
},
{
"productId": "123458",
"name": "Daiper",
"category": "Home",
"store": "store3",
"pricing": 30
},
{
"productId": "123466",
"name": "Paint",
"category": "Home",
"store": "store2",
"pricing": 25
},
{
"productId": "123467",
"name": "Paint",
"category": "Home",
"store": "store1",
"pricing": 36
},
{
"productId": "123468",
"name": "Paint",
"category": "Home",
"store": "store3",
"pricing": 80
}
]
答案 0 :(得分:2)
您可以name
属性_.groupBy()
项目,然后_.map()
组的数组到每组的第1项或最后一项:
function filterGroups(groupIdProp, predicate) {
return function(arr) {
return _(arr)
.groupBy(groupIdProp)
.map(predicate)
.values();
}
}
var filterFirst = filterGroups('name', function(group) {
return group[0];
});
var filterLast = filterGroups('name', function(group) {
return group[group.length - 1];
})
var arr = [{
"productId": "123456",
"name": "Daiper",
"category": "Home",
"store": "store1",
"pricing": 10
}, {
"productId": "123457",
"name": "Daiper",
"category": "Home",
"store": "store2",
"pricing": 20
}, {
"productId": "123458",
"name": "Daiper",
"category": "Home",
"store": "store3",
"pricing": 30
}, {
"productId": "123466",
"name": "Paint",
"category": "Home",
"store": "store2",
"pricing": 25
}, {
"productId": "123467",
"name": "Paint",
"category": "Home",
"store": "store1",
"pricing": 36
}, {
"productId": "123468",
"name": "Paint",
"category": "Home",
"store": "store3",
"pricing": 80
}];
console.log('first', filterFirst(arr));
console.log('last', filterLast(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>