函数式编程:过滤然后映射的术语?

发布于 2024-11-05 11:32:24 字数 390 浏览 0 评论 0原文

有时我发现自己想要过滤集合,然后映射结果。

例如,在 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
;

在功能术语中是否有一个术语来表示这种先过滤后映射的组合?

Sometimes I find myself wanting to filter a collection, then map the results.

In JavaScript, for example:

var completedStepIds = steps.filter(function(step) {
    return step.isComplete;
}).map(function(step) {
    return step.id;
});

Or in C#/LINQ:

var completedStepIds = 
    from step in steps
    where step.IsComplete
    select step.Id
;

In there a term in functional parlance for this filter-then-map combination?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

渡你暖光 2024-11-12 11:32:24

我猜你想要列表理解:

[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;
})

I guess you want list-comprehensions:

[f(x) | x <- list, g(x)] # Haskell
[f(x) for x in iterable if g(x)] # Python

Well, jQuery's map works this way, which is a list-comprehension in disguise:

> $.map([1,2,3], function(x) { return x != 2 ? 2 * x: null })
[2, 6]

On the other hand Prototype does not filter at all (which is the orthodox thing to do, a map should not reduce):

> [1,2,3].map(function(x) { return x != 2 ? 2 * x: null })
[2, null, 6]

I don't know which library are you using, but you can always write your own abstraction which clears null/undefined from the mapping:

steps.map_and_filter(function(step) {
    return step.isComplete ? step.id : null;
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文