es6-comprehensions
Compiles JavaScript array comprehensions (proposed in ES6) to ES5-compatible syntax. For instance:
var squared = [ for (x of [1,2,3,4,5]) if (x > 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 = $__0.next()).done; ) {
var x = $__1.value;
if (x > 2) {
$__result.push(x * x);
}
}
return $__result;
}.bind(this)();
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.
Installation
$ npm install es6-comprehensions [--save]
Support
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.
Todo
- 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.
Development
- Clone the repository.
- Run
npm install
. - Do your changes.
Pull requests are highly appreciated.
Changelog
v0.3.1
v0.3.0
- Added support for
for...of
loop. (Thanks @vslinko for PR.) Important! Generated code contains two more necessary functions.
v0.2.3
- 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.)
v0.2.2
- Using ast-util to generate safe temporary variables.
v0.2.1
- Replaced ComprehensionExpression with CallExpression instead of ExpressionStatement.
v0.2.0
- Changed API to conform to esnext's requirements.
License
BSD