より機能的な方法で以下を行う最良の方法は何ですか(ES6/ES7を使用)
let cols = [];
for (let i =0; i <= 7; i++) {
cols.Push(i * i);
}
return cols;
私は
return [ ...7 ].map(i => {
return i * i;
});
しかしそれは
[].concat(7).map(function (n) {
return n * n;
});
それは私が期待したものではありません。
@pavlo。確かに、それは間違いでした。私はJSXを使用していました。たとえば、7 divが必要です(未テスト)
let cols = [];
for (let i =0; i <= 7; i++) {
cols.Push(<div id={i}> ... </div>)
}
return cols;
そのため、実際には、一時変数の数と手順の感触を減らすことが目的でした。
空の配列を作成し、それを入力して(それ以外の場合はマップはスキップします)、インデックスを値にマップできます。
Array(8).fill().map((_, i) => i * i);
警告:残念ながら、ほとんどの人気のあるプラットフォームは理解のサポートをやめたと思います。よくサポートされているES6メソッドについては、以下を参照してください
次のようなものをいつでも使用できます。
[for (i of Array(7).keys()) i*i];
Firefoxでこのコードを実行する:
[0、1、4、9、16、25、36]
これはFirefoxで動作します(提案されたES7機能でした)が、仕様から削除されました。 IIRC、「実験的」を有効にしたBabel 5はこれをサポートします。
これは、配列の理解がこの目的にのみ使用されるため、最善の策です。これに沿って範囲関数を書くこともできます:
var range = (u, l = 0) => [ for( i of Array(u - l).keys() ) i + l ]
その後、次のことができます。
[for (i of range(5)) i*i] // 0, 1, 4, 9, 16, 25
[for (i of range(5,3)) i*i] // 9, 16, 25
以下のいずれかを行うための良い方法:
[...Array(7).keys()].map(i => i * i);
Array(7).fill().map((_,i) => i*i);
[...Array(7)].map((_,i) => i*i);
これは出力されます:
[0、1、4、9、16、25、36]
ジェネレーターを使用したアプローチは次のとおりです。
function* square(n) {
for (var i = 0; i < n; i++ ) yield i*i;
}
次に書くことができます
console.log(...square(7));
別のアイデアは次のとおりです。
[...Array(5)].map((_, i) => i*i)
Array(5)
は、空の5要素配列を作成します。これは、単一の引数が与えられたときにArray
がどのように機能するかです。スプレッド演算子を使用して、5つの未定義の要素を持つ配列を作成します。マッピングできること。 http://ariya.ofilabs.com/2013/07/sequences-using-javascript-array.html を参照してください。
または、次のように書くこともできます
Array.from(Array(5)).map((_, i) => i*i)
または、Array#from
の2番目の引数を利用して、map
をスキップして、
Array.from(Array(5), (_, i) => i*i)
私が最近見た恐ろしいハック、私はそれを使用することをお勧めしますnot
[...1e4+''].map((_, i) => i*i)