From 71dae7b71ea5b7b37c72a8c6c4bdc10ab03cf952 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 23 Mar 2014 19:44:30 +0100 Subject: [PATCH] Add ol.array.safeExtend --- src/ol/array.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/ol/array.js b/src/ol/array.js index 882a501262..9e4ffc1da2 100644 --- a/src/ol/array.js +++ b/src/ol/array.js @@ -37,6 +37,25 @@ ol.array.binaryFindNearest = function(arr, target) { }; +/** + * Safe version of goog.array.extend that does not risk to overflow the stack + * even if `array2` contains a large number of elements. + * + * @param {Array.} array1 Array 1. + * @param {Array.} array2 Array 2. + * @template T + */ +ol.array.safeExtend = function(array1, array2) { + // goog.array.extend uses Array.prototype.push.apply, which can overflow the + // stack if array2 contains too many elements. Repeatedly calling push + // performs as well on modern browsers. + var i, ii; + for (i = 0, ii = array2.length; i < ii; ++i) { + array1.push(array2[i]); + } +}; + + /** * @param {Array.} arr Array. * @param {number} target Target.