2012年4月17日火曜日

JavaScript 1.7 の配列内包

1. Python, Haskell のリスト内包表記

Python で、リスト内包表記を使い、リストの要素を2倍する。

>>> [x*2 for x in range(1, 6)]
[2, 4, 6, 8, 10]

Haskell も、リスト内包表記を使える。

Prelude> [x*2 | x <- [1..5]]
[2,4,6,8,10]

 

2. JavaScript の配列内包

JavaScript 1.7 でも、上記と同じような 配列内包 を使える。

Firefox で Firefox ボタン > Web 開発 > スクラッチパッドを起動し、以下を実行。(cf. Tools - MDN

[x*2 for each (x in [1,2,3,4,5])]
/*
2,4,6,8,10
*/

ただし、配列内包を使えるブラウザは限られている。

JavaScript tests, compatibility tables and examples

for each の each を忘れると、結果が異なる。

[x*2 for (x in [1,2,3,4,5])]/*
0,2,4,6,8
*/

これは、配列の添え字を取り出しているからかな。

JavaScript の配列内包が、Python のリスト内包表記に似ているのは、Python から取り入れられたため。

python - What is cross browser support for JavaScript 1.7's new features? Specifically array comprehensions and the "let" statement - Stack Overflow

According to wikipedia, JavaScript 1.7 implements ECMAScript "Edition 3 plus all JavaScript 1.6 enhancements, plus Pythonic generators and array comprehensions ([a*a for (a in iter)]), block scope with let, destructuring assignment (var [a,b]=[1,2])". So these features are not part of ECMAScript.

Google Chrome には、いつ取り入れられるのかな?

 

関連記事

関連サイト