Show More
Commit Description:
merge
Commit Description:
merge
References:
File last commit:
Show/Diff file:
Action:
node_modules/core-js/modules/es6.array.from.js
| 37 lines
| 1.6 KiB
| application/javascript
| JavascriptLexer
|
r789 | 'use strict'; | |||
var ctx = require('./_ctx'); | ||||
var $export = require('./_export'); | ||||
var toObject = require('./_to-object'); | ||||
var call = require('./_iter-call'); | ||||
var isArrayIter = require('./_is-array-iter'); | ||||
var toLength = require('./_to-length'); | ||||
var createProperty = require('./_create-property'); | ||||
var getIterFn = require('./core.get-iterator-method'); | ||||
$export($export.S + $export.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); | ||||
var C = typeof this == 'function' ? this : Array; | ||||
var aLen = arguments.length; | ||||
var mapfn = aLen > 1 ? arguments[1] : undefined; | ||||
var mapping = mapfn !== undefined; | ||||
var index = 0; | ||||
var iterFn = getIterFn(O); | ||||
var length, result, step, iterator; | ||||
if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 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++) { | ||||
createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); | ||||
} | ||||
} else { | ||||
length = toLength(O.length); | ||||
for (result = new C(length); length > index; index++) { | ||||
createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); | ||||
} | ||||
} | ||||
result.length = index; | ||||
return result; | ||||
} | ||||
}); | ||||