UNPKG

core-js

Version:
33 lines 1.47 kB
'use strict'; var ctx = require('./$.ctx') , $def = require('./$.def') , toObject = require('./$.to-object') , call = require('./$.iter-call') , isArrayIter = require('./$.is-array-iter') , toLength = require('./$.to-length') , getIterFn = require('./core.get-iterator-method'); $def($def.S + $def.F * !require('./$.iter-detect')(function(iter){ Array.from(iter); }), 'Array', { // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){ var O = toObject(arrayLike) , C = typeof this == 'function' ? this : Array , mapfn = arguments[1] , mapping = mapfn !== undefined , index = 0 , iterFn = getIterFn(O) , length, result, step, iterator; if(mapping)mapfn = ctx(mapfn, arguments[2], 2); // if object isn't iterable or it's array with default iterator - use simple case if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){ for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){ result[index] = mapping ? call(iterator, mapfn, [step.value, index], true) : step.value; } } else { for(result = new C(length = toLength(O.length)); length > index; index++){ result[index] = mapping ? mapfn(O[index], index) : O[index]; } } result.length = index; return result; } });