Show More
Commit Description:
submission report
Commit Description:
submission report
References:
File last commit:
Show/Diff file:
Action:
node_modules/es-abstract/2016/CreateListFromArrayLike.js
| 43 lines
| 1.3 KiB
| application/javascript
| JavascriptLexer
|
r789 | 'use strict'; | |||
var GetIntrinsic = require('../GetIntrinsic'); | ||||
var callBound = require('../helpers/callBound'); | ||||
var $TypeError = GetIntrinsic('%TypeError%'); | ||||
var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); | ||||
var $push = callBound('Array.prototype.push'); | ||||
var Get = require('./Get'); | ||||
var IsArray = require('./IsArray'); | ||||
var ToLength = require('./ToLength'); | ||||
var ToString = require('./ToString'); | ||||
var Type = require('./Type'); | ||||
// https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike | ||||
module.exports = function CreateListFromArrayLike(obj) { | ||||
var elementTypes = arguments.length > 1 | ||||
? arguments[1] | ||||
: ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; | ||||
if (Type(obj) !== 'Object') { | ||||
throw new $TypeError('Assertion failed: `obj` must be an Object'); | ||||
} | ||||
if (!IsArray(elementTypes)) { | ||||
throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); | ||||
} | ||||
var len = ToLength(Get(obj, 'length')); | ||||
var list = []; | ||||
var index = 0; | ||||
while (index < len) { | ||||
var indexName = ToString(index); | ||||
var next = Get(obj, indexName); | ||||
var nextType = Type(next); | ||||
if ($indexOf(elementTypes, nextType) < 0) { | ||||
throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); | ||||
} | ||||
$push(list, next); | ||||
index += 1; | ||||
} | ||||
return list; | ||||
}; | ||||