コードコピーは次のとおりです。
a = new Array();
b = new Array(125624);
a.push.apply(a、b);
上記のコードは、Mac Chromeの下に次の例外をスローします
コードコピーは次のとおりです。
Uncaught raigherror:最大コールスタックサイズを超えました
配列をb = new Array(125623)に変更した場合。あなたがより小さな要素を持っているなら、それは素晴らしいことです。他のブラウザにも大きな配列に問題があることをテストしましたが、異なるブラウザの重要な値はまだ異なります。
http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-an-an-an-aray/17368101#17368101を検索して、誰かがそのような落とし穴を遭遇したことを発見しました。
コードコピーは次のとおりです。
array.prototype.extend = function(other_array){
/ *他の_arrayが本当に配列であるかどうかを確認するためのテストを含める必要があります */
other_array.foreach(function(v){this.push(v)}、this);
}
与えられた提案は、正直で実用的であるためです。
この小さなピットは私に2つの考えを与えてくれました:
1. a.push.apply(a、b)などのいくつかの派手な使用法。インタビューの質問を披露するのに使用するだけで十分です。実際には、異常やパフォーマンスの落とし穴に遭遇しないように、正直なルートをとる方が良いでしょう。たとえば、この記事に数十ノードを備えた少数の3Dネットワークトポロジスプリングレイアウトの例は問題ありません。この記事のWebパフォーマンスの例など、実際のビッグデータボリュームに遭遇した場合にのみ、問題をテストできます。
2。http://stackoverflow.com/questions/1374126 Stackoverflowからの回答を探しているときは、最も投票したものに焦点を当てないでください。真実はしばしば少数の人々の手にあります。下の図に259票の答えはピットであり、34票が最も完璧な分析です。