Полагаю, вам нужны списочные выражения:
[f(x) | x <- list, g(x)] # Haskell
[f(x) for x in iterable if g(x)] # Python
Что ж, jQuery's 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;
})