From: Tom Hughes Date: Tue, 29 Jan 2019 23:14:25 +0000 (+0000) Subject: Add polyfill for Array.prototype.findIndex X-Git-Tag: live~3307 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/b040955b547556fa85fbcc4760f8f5b53ba36773 Add polyfill for Array.prototype.findIndex Fixes #2124 --- diff --git a/vendor/assets/augment.js/augment.js b/vendor/assets/augment.js/augment.js index 0bf2fd47c..33f03908f 100644 --- a/vendor/assets/augment.js/augment.js +++ b/vendor/assets/augment.js/augment.js @@ -395,3 +395,50 @@ if (!Object.keys) { } })() }; +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex +// https://tc39.github.io/ecma262/#sec-array.prototype.findindex +if (!Array.prototype.findIndex) { + Object.defineProperty(Array.prototype, 'findIndex', { + value: function(predicate) { + // 1. Let O be ? ToObject(this value). + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + + var o = Object(this); + + // 2. Let len be ? ToLength(? Get(O, "length")). + var len = o.length >>> 0; + + // 3. If IsCallable(predicate) is false, throw a TypeError exception. + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function'); + } + + // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. + var thisArg = arguments[1]; + + // 5. Let k be 0. + var k = 0; + + // 6. Repeat, while k < len + while (k < len) { + // a. Let Pk be ! ToString(k). + // b. Let kValue be ? Get(O, Pk). + // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). + // d. If testResult is true, return k. + var kValue = o[k]; + if (predicate.call(thisArg, kValue, k, o)) { + return k; + } + // e. Increase k by 1. + k++; + } + + // 7. Return -1. + return -1; + }, + configurable: true, + writable: true + }); +}