module.exports = function from(arrayLike) { var defineProperty = supportsDescriptors ? Object.defineProperty : function put(object, key, descriptor) { object[key] = descriptor.value; }; var C = this; if (arrayLike === null || typeof arrayLike === 'undefined') { throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`'); } var items = ES.ToObject(arrayLike); var mapFn, T; if (arguments.length > 1) { mapFn = arguments[1]; if (!ES.IsCallable(mapFn)) { throw new TypeError('When provided, the second argument to `Array.from` must be a function'); } if (arguments.length > 2) { T = arguments[2]; } } var len = ES.ToLength(items.length); var A = ES.IsCallable(C) ? ES.ToObject(new C(len)) : new Array(len); var k = 0; var kValue, mappedValue; while (k < len) { kValue = items[k]; if (mapFn) { mappedValue = typeof T === 'undefined' ? mapFn(kValue, k) : ES.Call(mapFn, T, [kValue, k]); } else { mappedValue = kValue; } defineProperty(A, k, { 'value': mappedValue, 'configurable': true, 'enumerable': true, 'writable': true }); k += 1; } A.length = len; return A; };
module.exports = function find(predicate) { var list = ES.ToObject(this); var length = ES.ToInteger(ES.ToLength(list.length)); if (!ES.IsCallable(predicate)) { throw new TypeError('Array#find: predicate must be a function'); } if (length === 0) return undefined; var thisArg = arguments[1]; for (var i = 0, value; i < length; i++) { value = list[i]; if (ES.Call(predicate, thisArg, [value, i, list])) return value; } return undefined; };
module.exports = function includes(searchElement) { var fromIndex = arguments.length > 1 ? ES.ToInteger(arguments[1]) : 0; if (indexOf && !$isNaN(searchElement) && $isFinite(fromIndex) && typeof searchElement !== 'undefined') { return indexOf.apply(this, arguments) > -1; } var O = ES.ToObject(this); var length = ES.ToLength(O.length); if (length === 0) { return false; } var k = fromIndex >= 0 ? fromIndex : Math.max(0, length + fromIndex); while (k < length) { if (ES.SameValueZero(searchElement, O[k])) { return true; } k += 1; } return false; };