Если вы не пытаетесь выжать каждую унцию производительности, я бы создал функцию фильтра, например, такую:
filter = (list, func) -> x for x in list when func(x)
или, если вы хотите добавить ее к прототипу каждого массива:
Array::filter = (func) -> x for x in @ when func(x)
и затем напишите: (соответственно)
result = filter mylist, (x) -> x % 2 == 0
или
result = mylist.filter (x) -> x % 2 == 0
Для справки: генерируемый javascript:
var filter, result;
filter = function(list, func) {
var x, _i, _len, _results;
_results = [];
for (_i = 0, _len = list.length; _i < _len; _i++) {
x = list[_i];
if (func(x)) {
_results.push(x);
}
}
return _results;
};
Array.prototype.filter = function(func) {
var x, _i, _len, _results;
_results = [];
for (_i = 0, _len = this.length; _i < _len; _i++) {
x = this[_i];
if (func(x)) {
_results.push(x);
}
}
return _results;
};
result = filter(mylist, function(x) {
return x % 2 === 0;
});
result = mylist.filter(function(x) {
return x % 2 === 0;
});
Есть похожий вопрос здесь