5

JavaScript配列を生成するためのいくつかの異なる方法を試しているときに、奇妙な結果に出くわしました。自己参照の配列(mapDEMO の使用:push

a=[1,1,1,1,1,1,1,1,1,1];
a=a.map(a.push,a);

次の結果が得られます(Chromeで):

[13,16,19,22,25,28,31,34,37,40]

誰かが理由を説明できますか?

4

2 に答える 2

6

の各要素についてapushその要素、その要素のインデックス、およびトラバースされる配列を使用して呼び出されます。次に、配列内の要素ごとに、これら3つの要素を追加します。これは、元の配列の各要素の長さが3ずつ増加することを考慮しています。プッシュの結果は、要素が追加された後の配列の長さです。したがって、結果の配列(from )は、各プッシュコールバックが完了した後mapの配列の長さを保持する配列になります。a

マッププッシュのドキュメントを参照してください。

于 2013-01-25T05:37:09.943 に答える
2

pushこれは、新しい長さであるという戻り値と関係があります。なぜそれが3ずつ増加するのかわからない。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push

戻り値
メソッドが呼び出されたオブジェクトの新しい長さプロパティ。

于 2013-01-25T05:33:14.100 に答える