Firefox 32 で Array.from が実装された
Array-like な値をArrayに変換するメソッドです。
引数は
- arrayLike: Array-likeなオブジェクト
- mapfn:(Optional) Array.prototype.map に渡すような function
- thisArg:(Optional) 同上
Array-likeなオブジェクトとは以下の様なもの
@@iterator
のイテレータを持つものlength
プロパティを持つもの
length
プロパティを持つものより、@@iterator
の方が優先度が高いので注意
使用例
思いつくものをテキトウに
HTMLCollection, NodeList に対して、forEach, map, filter 等の適用
jQueryとやらがあるから別に…と思われそうだけど。
// fooClassの要素のタグ名を抽出 var tagNames = Array.from(document.querySelectorAll(".fooClass"), node => node.localName); // 普通にmapを使っても良い var tagNames = Array.from(document.querySelectorAll(".fooClass")).map(node => node.localName); // 属性を付けてみたり Array.from(document.querySelectorAll(".fooClass")).forEach(node => node.setAttribute("hidden", "true"))
文字列生成
forEach, map, filter は Sparse-Array(lengthのみを持つArray, Array(10) とかか生成されたArrayのこと)との相性が悪かったが、Array.fromを使用するとindex値の方は与えられるので以下の様なことも。
Array.from(Array(26), (v, i) => String.fromCharCode(i + 97)).join(""); // => "abc....xyz"
ま、ArrayComprehensionを使うともう少し短くかけるんだけどね。
[for (i of Array(26).keys()) String.fromCharCode(i + 97)].join("")