Index: lib/compat.js |
diff --git a/lib/compat.js b/lib/compat.js |
index 9e3d69dcfd585954851936c404a48136dd129e7a..e9e1b6497c91261d76cbf43f5eafb2af30e0f524 100644 |
--- a/lib/compat.js |
+++ b/lib/compat.js |
@@ -443,3 +443,48 @@ XMLHttpRequest.prototype = |
} |
} |
}; |
+ |
+ |
+// Polyfill Array.prototype.find |
+// from https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find |
+// https://tc39.github.io/ecma262/#sec-array.prototype.find |
+if (!Array.prototype.find) { |
+ Object.defineProperty(Array.prototype, 'find', { |
+ 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 kValue. |
+ var kValue = o[k]; |
+ if (predicate.call(thisArg, kValue, k, o)) { |
+ return kValue; |
+ } |
+ // e. Increase k by 1. |
+ k++; |
+ } |
+ } |
+ }); |
+} |