filterofirst和filterlast函数与lodash

时间:2016-08-29 22:08:23

标签: javascript arrays lodash

我们假设我们有一系列产品,如下所示,产品按名称排序,然后按价格排序。 如何使用lodash获得每个类别中最便宜的产品或最昂贵的产品? 我们需要filterfirstfilterlast函数。

[
    {
      "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
    }
]

1 个答案:

答案 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>