19 lines
891 B
JavaScript
19 lines
891 B
JavaScript
var ctx = require('./$.ctx')
|
|
, call = require('./$.iter-call')
|
|
, isArrayIter = require('./$.is-array-iter')
|
|
, anObject = require('./$.an-object')
|
|
, toLength = require('./$.to-length')
|
|
, getIterFn = require('./core.get-iterator-method');
|
|
module.exports = function(iterable, entries, fn, that){
|
|
var iterFn = getIterFn(iterable)
|
|
, f = ctx(fn, that, entries ? 2 : 1)
|
|
, index = 0
|
|
, length, step, iterator;
|
|
if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');
|
|
// fast case for arrays with default iterator
|
|
if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){
|
|
entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
|
|
} else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){
|
|
call(iterator, f, step.value, entries);
|
|
}
|
|
}; |