如何使用lodash`value`并继续使用链?

时间:2017-01-01 18:16:24

标签: lodash

我喜欢lodash并且我在许多项目中使用它。

我一直有这个问题,但我无法找到解决方法。

我想用lodash做点什么,保存一个临时状态,然后继续。

例如,假设我有moviesList这是一个带有ID和利润的电影列表,我想

  • 按照ID标记电影,并将结果保存在moviesById
  • 过滤有利可图的电影,并将结果保存在overMillionProfit

我想在不打破链条的情况下这样做。 像(一厢情愿的想法):

  var moviesList = [{id : 1}, {id:2}, ...];
  var moviesById = {};
  var overMillionProfit = [];
  _(moviesList)
      .keyBy('id')
      .do((unwrappedValue)=> moviesById = unwrappedValue)
      .values()
      .filter( (m) => m.profit > 1000000)
      .do((unwrappedValue) => overMillionProfit = unwrappedValue)

目前,我觉得有必要像这样打破链条:

  var moviesList = [{id : 1}, {id:2}, ...];
  var moviesById = _.keyBy(moviesList,'id');
  var overMillionProfit = _.filter(moviesList, ...);

也许对于这种情况它更好,但我希望能够在某些情况下像上面这样做。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:3)

您可以使用_.tap()

var moviesList = [{id : 1}, {id:2}, {id:3}];
  var moviesById;
  var overMillionProfit;
  var result = _(moviesList)
      .keyBy('id')
      .tap((unwrappedValue)=> moviesById = unwrappedValue)
      .values()
      .filter( (m) => m.id > 1)
      .tap((unwrappedValue) => overMillionProfit = unwrappedValue)
      .value();

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