diff --git a/CHANGELOG.md b/CHANGELOG.md index d7e5af83..5620a4a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Breaking changes: New features: Bugfixes: +- call stack exceeded in Control.Bind.Bind instance for Array (#311 by @michaelficarra) Other improvements: diff --git a/src/Control/Bind.js b/src/Control/Bind.js index fa0dbaeb..7435fb95 100644 --- a/src/Control/Bind.js +++ b/src/Control/Bind.js @@ -1,8 +1,16 @@ +var APPLY_CHUNK_SIZE = 10e3; +var push = Function.prototype.apply.bind(Array.prototype.push); + export const arrayBind = function (arr) { return function (f) { var result = []; for (var i = 0, l = arr.length; i < l; i++) { - Array.prototype.push.apply(result, f(arr[i])); + var subArr = f(arr[i]); + while (subArr.length > APPLY_CHUNK_SIZE) { + push(result, subArr.slice(0, APPLY_CHUNK_SIZE); + subArr = subArr.slice(APPLY_CHUNK_SIZE); + } + push(result, subArr); } return result; };