44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
		
			Generated
		
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
		
			Generated
		
	
	
| '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;
 | |
| };
 |