有时我发现自己想要过滤一个集合,然后映射结果。
在JavaScript中,例如:
var completedStepIds = steps.filter(function(step) {
return step.isComplete;
}).map(function(step) {
return step.id;
});
或者在C#/ LINQ中:
var completedStepIds =
from step in steps
where step.IsComplete
select step.Id
;
在这个过滤器 - 然后 - 地图组合的功能用语中有一个术语吗?
答案 0 :(得分:1)
我想你想要列表推导:
[f(x) | x <- list, g(x)] # Haskell
[f(x) for x in iterable if g(x)] # Python
嗯,jQuery的map
以这种方式工作,这是伪装的列表理解:
> $.map([1,2,3], function(x) { return x != 2 ? 2 * x: null })
[2, 6]
另一方面,Prototype根本没有过滤(这是正统的事情,地图不应该减少):
> [1,2,3].map(function(x) { return x != 2 ? 2 * x: null })
[2, null, 6]
我不知道您使用的是哪个库,但是您总是可以编写自己的抽象,从映射中清除null / undefined:
steps.map_and_filter(function(step) {
return step.isComplete ? step.id : null;
})