foop
Version:
interfaces that describe their intentions.
50 lines (45 loc) • 4.39 kB
JavaScript
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==