Version 1
[yaffs-website] / node_modules / core-js / modules / es6.array.from.js
1 'use strict';
2 var ctx            = require('./_ctx')
3   , $export        = require('./_export')
4   , toObject       = require('./_to-object')
5   , call           = require('./_iter-call')
6   , isArrayIter    = require('./_is-array-iter')
7   , toLength       = require('./_to-length')
8   , createProperty = require('./_create-property')
9   , getIterFn      = require('./core.get-iterator-method');
10
11 $export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {
12   // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
13   from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){
14     var O       = toObject(arrayLike)
15       , C       = typeof this == 'function' ? this : Array
16       , aLen    = arguments.length
17       , mapfn   = aLen > 1 ? arguments[1] : undefined
18       , mapping = mapfn !== undefined
19       , index   = 0
20       , iterFn  = getIterFn(O)
21       , length, result, step, iterator;
22     if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
23     // if object isn't iterable or it's array with default iterator - use simple case
24     if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){
25       for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){
26         createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
27       }
28     } else {
29       length = toLength(O.length);
30       for(result = new C(length); length > index; index++){
31         createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
32       }
33     }
34     result.length = index;
35     return result;
36   }
37 });