以下のコードでmap()の出力に違いがあるのはなぜですか?
var y = [1,2,2,1];
var t = y.map(ind => [...Array(ind)].map((_,i) => ind+""+i));
// This makes [ [ '10' ], [ '20', '21' ], [ '20', '21' ], [ '10' ] ]
var t1 = y.map(ind => Array(ind).map((_,i) => ind+""+i));
//[ [ <1 empty item> ], [ <2 empty items> ], [ <2 empty items> ], [ <1 empty item> ] ]
これが基本的に、配列コンストラクターを使用して配列を作成することを避ける必要がある理由です。
単一の数値n
を引数として渡すと、Array
コンストラクターは長さの配列を返しますn
が、要素は返しません。これはスパース配列とも呼ばれます。(配列コンストラクター、文字列、オブジェクト、2つの数値などに渡される他のすべてのものは、渡された引数を要素として順番に持つ通常の配列を作成します)。
.map()
この配列には項目がないため、この配列を上書きしようとしても機能しません。これが、同じスパース配列を取得する理由です。あなた.map()
はノーオペレーションです。
使用[...
(と同じArray.from()
それを介して、)、旋回アレイ「の実現」であろう[ <1 empty item> ]
に[undefined]
と[ <2 empty items> ]
に[undefined, undefined]
、値であり、実際の要素を持つ配列をundefined
。あなたが期待する結果を得るので、この上で作業を。.map()
つまり、Array
コンストラクターは避けてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加