코드 사본은 다음과 같습니다.
a = new Array ();
b = 새로운 배열 (125624);
A.push.Apply (a, b);
위의 코드는 Mac Chrome에서 다음과 같은 예외를 던집니다.
코드 사본은 다음과 같습니다.
Uncaught RangeError : 최대 통화 스택 크기가 초과되었습니다
배열을 b = 새 배열 (125623)으로 변경하면; 더 작은 요소가 있다면 좋을 것입니다. 다른 브라우저도 큰 배열에 문제가 있지만 다른 브라우저의 임계 값은 여전히 다릅니다.
나는 http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-neisisting-javascript-array/17368101#17368101을 검색하여 누군가가 그러한 함정을 만난다는 것을 알았습니다.
코드 사본은 다음과 같습니다.
Array.prototype.extend = function (Other_Array) {
/ * 다른 _array가 실제로 배열인지 확인하기 위해 테스트를 포함해야합니다 */
Other_Array.foreach (function (v) {this.push (v)}, this);
}
주어진 제안은 정직하고 실용적이어야하며, 큰 배열의 예외 문제를 피할 수있을뿐만 아니라 Foreach의 성능을 가장 빠른 것으로 간주 할 수 있습니다.
이 작은 구덩이는 나에게 두 가지 생각을 주었다.
1. A.Push.Apply (a, b)와 같은 일부 멋진 사용법; 인터뷰 질문이있을 때 과시하는 데 사용되는 것으로 충분합니다. 실제로, 이상과 성능의 함정이 발생하지 않도록 정직한 길을 택하는 것이 좋습니다. 예를 들어,이 기사에서 수십 개의 노드가있는 소수의 3D 네트워크 토폴로지 스프링 레이아웃 예제는 괜찮습니다. 이 기사의 웹 성능 예제를위한 HT와 같은 실제 빅 데이터 볼륨을 만나면 문제를 테스트 할 수 있습니다.
2. http://stackoverflow.com/questions/1374126 stackoverflow에서 답을 찾을 때 가장 투표하는 사람들에게만 초점을 맞추지 마십시오. 진실은 종종 소수의 사람들의 손에 달려 있습니다. 아래 그림에서 259 표를 가진 답변은 구덩이이며 34 표가 가장 완벽한 분석입니다.