UNPKG

foop

Version:

interfaces that describe their intentions.

50 lines (45 loc) 4.39 kB
var isUndefined = require('../is/undefined') /** * @name keyValueToIterator * @since 5.0.0-beta.6 * * @param {Array<number | string>} keys array of keys * @param {Array<*>} values array of values * @param {number} size length/size * @return {Iterator} * * @NOTE isSet(map) ? preAllocate(size) : map.keys() <- works, but too monomorphic * @TODO could do prepack-style and have returned object reused? * * {@link https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects emca-iterator-operations} * {@link https://github.com/facebook/immutable-js/blob/master/src/Iterator.js#L19 immutable-js-iterator} * @see {@link immutable-js-iterator} * @see {@link emca-iterator-operations} * * @example * * keyValueToIterator([0, 1], ['one', 'two'], 2) * //=> {value: [0, 'one'], done: false, i: 0} * //=> {value: [1, 'two'], done: false, i: 1} * //=> {value: undefined, done: true, i: 2} * */ module.exports = function keyValueToIterator(keys, values, size) { return { i: 0, next: function next() { var i = this.i var key = i var val = values[i] key = keys[i] // done - no more values, or iteration reached size if ((isUndefined(key) && isUndefined(val)) || size <= i) { return {value: undefined, done: true} } this.i++ // return return {value: [key, val], done: false} }, } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5VmFsdWVUb0l0ZXJhdG9yLmpzIiwic291cmNlcyI6WyJrZXlWYWx1ZVRvSXRlcmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pcy91bmRlZmluZWQnKVxuXG4vKipcbiAqIEBuYW1lIGtleVZhbHVlVG9JdGVyYXRvclxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0ga2V5cyBhcnJheSBvZiBrZXlzXG4gKiBAcGFyYW0ge0FycmF5PCo+fSB2YWx1ZXMgYXJyYXkgb2YgdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBsZW5ndGgvc2l6ZVxuICogQHJldHVybiB7SXRlcmF0b3J9XG4gKlxuICogQE5PVEUgaXNTZXQobWFwKSA/IHByZUFsbG9jYXRlKHNpemUpIDogbWFwLmtleXMoKSA8LSB3b3JrcywgYnV0IHRvbyBtb25vbW9ycGhpY1xuICogQFRPRE8gY291bGQgZG8gcHJlcGFjay1zdHlsZSBhbmQgaGF2ZSByZXR1cm5lZCBvYmplY3QgcmV1c2VkP1xuICpcbiAqIHtAbGluayBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vcGVyYXRpb25zLW9uLWl0ZXJhdG9yLW9iamVjdHMgZW1jYS1pdGVyYXRvci1vcGVyYXRpb25zfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9pbW11dGFibGUtanMvYmxvYi9tYXN0ZXIvc3JjL0l0ZXJhdG9yLmpzI0wxOSBpbW11dGFibGUtanMtaXRlcmF0b3J9XG4gKiBAc2VlIHtAbGluayBpbW11dGFibGUtanMtaXRlcmF0b3J9XG4gKiBAc2VlIHtAbGluayBlbWNhLWl0ZXJhdG9yLW9wZXJhdGlvbnN9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIGtleVZhbHVlVG9JdGVyYXRvcihbMCwgMV0sIFsnb25lJywgJ3R3byddLCAyKVxuICogICAvLz0+IHt2YWx1ZTogWzAsICdvbmUnXSwgZG9uZTogZmFsc2UsIGk6IDB9XG4gKiAgIC8vPT4ge3ZhbHVlOiBbMSwgJ3R3byddLCBkb25lOiBmYWxzZSwgaTogMX1cbiAqICAgLy89PiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSwgaTogMn1cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ga2V5VmFsdWVUb0l0ZXJhdG9yKGtleXMsIHZhbHVlcywgc2l6ZSkge1xuICByZXR1cm4ge1xuICAgIGk6IDAsXG4gICAgbmV4dCgpIHtcbiAgICAgIGxldCBpID0gdGhpcy5pXG4gICAgICBsZXQga2V5ID0gaVxuICAgICAgY29uc3QgdmFsID0gdmFsdWVzW2ldXG4gICAgICBrZXkgPSBrZXlzW2ldXG5cbiAgICAgIC8vIGRvbmUgLSBubyBtb3JlIHZhbHVlcywgb3IgaXRlcmF0aW9uIHJlYWNoZWQgc2l6ZVxuICAgICAgaWYgKChpc1VuZGVmaW5lZChrZXkpICYmIGlzVW5kZWZpbmVkKHZhbCkpIHx8IHNpemUgPD0gaSkge1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWV9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaSsrXG5cbiAgICAgIC8vIHJldHVyblxuICAgICAgcmV0dXJuIHt2YWx1ZTogW2tleSwgdmFsXSwgZG9uZTogZmFsc2V9XG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJCOUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0VBQy9ELE9BQU87SUFDTCxDQUFDLEVBQUUsQ0FBQztJQUNKLElBQUksZUFBQSxHQUFHO01BQ0xDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7TUFDZEEsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQ1hELEdBQUssQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O01BR2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1FBQ3ZELE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7T0FDdEM7O01BRUQsSUFBSSxDQUFDLENBQUMsRUFBRTs7O01BR1IsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0tBQ3hDO0dBQ0Y7Q0FDRjsifQ==