Array-like な値をArrayに変換するメソッドです。
引数は
Array-likeなオブジェクトとは以下の様なもの
@@iterator
のイテレータを持つものlength
プロパティを持つものlength
プロパティを持つものより、@@iterator
の方が優先度が高いので注意
思いつくものをテキトウに
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("")
Array-likeなオブジェクト
と言ってきたけど、文字列も行ける
var charList = Array.from("abcd");
文字列も@@iterator
を持つので、イテレータが使用され、サロゲートペアにも対応することになる。その分、"str".split("")
より良いと思われる。