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.