Created
September 7, 2017 15:28
-
-
Save SigurdMW/04d3e5a3f7428b12c8b2fb3412260cb3 to your computer and use it in GitHub Desktop.
polyfills for ie 10/11 for findIndex, and forEach on nodeLists
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function polyfill() { | |
// allow using el.querySelectorAll(...).forEach(...) for looping through nodeLists | |
if (!NodeList.prototype.forEach) { | |
NodeList.prototype.forEach = Array.prototype.forEach; | |
} | |
// allow using [].findIndex(...) in all browsers | |
// 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; | |
} | |
}) | |
} | |
} | |
export default polyfill |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment