UNPKG

rsuite-theme

Version:
44 lines (33 loc) 973 B
'use strict'; module.exports = iterate; var own = {}.hasOwnProperty; function iterate(values, callback, context) { var index = -1; var result; if (!values) { throw new Error('Iterate requires that |this| not be ' + values); } if (!own.call(values, 'length')) { throw new Error('Iterate requires that |this| has a `length`'); } if (typeof callback !== 'function') { throw new Error('`callback` must be a function'); } /* The length might change, so we do not cache it. */ while (++index < values.length) { /* Skip missing values. */ if (!(index in values)) { continue; } result = callback.call(context, values[index], index, values); /* If `callback` returns a `number`, move `index` over to * `number`. */ if (typeof result === 'number') { /* Make sure that negative numbers do not break the loop. */ if (result < 0) { index = 0; } index = result - 1; } } }