Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带lodash的filterfirst和filterlast函数_Javascript_Arrays_Lodash - Fatal编程技术网

Javascript 带lodash的filterfirst和filterlast函数

Javascript 带lodash的filterfirst和filterlast函数,javascript,arrays,lodash,Javascript,Arrays,Lodash,假设我们有如下所示的一系列产品,产品是按名称然后按价格订购的。 如何使用lodash获得每个类别中最便宜的产品或最昂贵的产品? 我们需要类似于filterfirst和filterlast函数的东西 [ { "productId": "123456", "name": "Daiper", "category": "Home", "store": "store1", "pricing": 10 }, {

假设我们有如下所示的一系列产品,产品是按名称然后按价格订购的。 如何使用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
    }
]
您可以通过
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
也可能会引起兴趣。