Javascript 带lodash的filterfirst和filterlast函数
假设我们有如下所示的一系列产品,产品是按名称然后按价格订购的。 如何使用lodash获得每个类别中最便宜的产品或最昂贵的产品? 我们需要类似于Javascript 带lodash的filterfirst和filterlast函数,javascript,arrays,lodash,Javascript,Arrays,Lodash,假设我们有如下所示的一系列产品,产品是按名称然后按价格订购的。 如何使用lodash获得每个类别中最便宜的产品或最昂贵的产品? 我们需要类似于filterfirst和filterlast函数的东西 [ { "productId": "123456", "name": "Daiper", "category": "Home", "store": "store1", "pricing": 10 }, {
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
}
]
您可以通过name
属性选择项目,然后将组数组设置为每个组的第一个或最后一个项目:
函数filterGroups(groupIdProp,谓词){
返回函数(arr){
返回(arr)
.groupBy(groupIdProp)
.map(谓词)
.values();
}
}
var filterFirst=filterGroups('name',函数(组){
返回组[0];
});
var filterLast=filterGroups('name',函数(组){
返回组[group.length-1];
})
var arr=[{
“产品ID”:“123456”,
“名称”:“Daiper”,
“类别”:“家”,
“存储”:“存储1”,
“定价”:10
}, {
“产品ID”:“123457”,
“名称”:“Daiper”,
“类别”:“家”,
“存储”:“存储2”,
“定价”:20
}, {
“产品ID”:“123458”,
“名称”:“Daiper”,
“类别”:“家”,
“存储”:“存储3”,
“定价”:30
}, {
“产品ID”:“123466”,
“名称”:“油漆”,
“类别”:“家”,
“存储”:“存储2”,
“定价”:25
}, {
“产品ID”:“123467”,
“名称”:“油漆”,
“类别”:“家”,
“存储”:“存储1”,
“定价”:36
}, {
“产品ID”:“123468”,
“名称”:“油漆”,
“类别”:“家”,
“存储”:“存储3”,
“定价”:80
}];
console.log('first',filterFirst(arr));
console.log('last',filterLast(arr))代码>
纯js解决方案怎么样?链
->过滤器
->初始(偏移量)
或链
->过滤器
->切片(偏移量*-1)
将执行您想要的操作。由于延迟计算,您不会执行整个链,而是执行您想要的任意多的内容-因此,在第一个示例中,一旦达到offset
项,过滤将停止。第二个可能会被重写为与第一个相同,但会抛出一个额外的反向takeWhile
和takeRightWhile
也可能会引起兴趣。