我喜欢lodash并且我在许多项目中使用它。
我一直有这个问题,但我无法找到解决方法。
我想用lodash做点什么,保存一个临时状态,然后继续。
例如,假设我有moviesList
这是一个带有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, ...);
也许对于这种情况它更好,但我希望能够在某些情况下像上面这样做。
有办法做到这一点吗?
答案 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>