node package manager


Transforms ES6 Array Comprehensions to ES5 compliant equivalent.


Compiles JavaScript array comprehensions (proposed in ES6) to ES5-compatible syntax. For instance:

var squared = [ for (of [1,2,3,4,5]) if (> 2) x * x ];

compiles to:

var $__getIterator = function(iterable) { ... };
var $__arrayIterator = function(array) { ... };
var squared = function() {
  var $__result = [];
  for (var $__0 = $__getIterator([1,2,3,4,5]), $__1; !($__1 = $; ) {
    var x = $__1.value;
    if (> 2) {
      $__result.push(* x);
  return $__result;

I'm glad to inform you that es6-comprehensions is now a part of es-next project.

For more information check out the current draft for ECMAScript 6.

Please notice that the syntax has changed and many resources is still using the old one.

$ npm install es6-comprehensions [--save]

Array comprehensions progressed to the Draft ECMAScript 6 Specification. It doesn't mean that there will be no changes or that array comprehensions will be included in the final ES6 Specification.

ES6 defines also iterators that can be used together with for-of loops that can be used in array comprehensions. This translator does not support iterators in for-of loops. It translates for-of loops to plain for loops. Thus, it supports only plain JS arrays.

  • Consider replacing plain for loop with forEach method. It will result in more compact code,
  • Consider migration to escodegen. Removed in order to follow up esnext's dependencies.
  1. Clone the repository.
  2. Run npm install.
  3. Do your changes.

Pull requests are highly appreciated.

  • Added support for for...of loop. (Thanks @vslinko for PR.) Important! Generated code contains two more necessary functions.
  • Binding current scope to the generated function expression. This allows one to use this in an array comprehension. An example can be found in a test file. (Thanks @vslinko for PR.)
  • Using ast-util to generate safe temporary variables.
  • Replaced ComprehensionExpression with CallExpression instead of ExpressionStatement.
  • Changed API to conform to esnext's requirements.