iter-tools-es
Version:
The iterable toolbox
48 lines (38 loc) • 929 B
JavaScript
const {
iterableCurry
} = require('../../internal/iterable.js');
const {
__spliterateGrouped
} = require('../$spliterate-grouped/spliterate-grouped.js');
const {
__peekerate
} = require('../$peekerate/peekerate.js');
const initialKey = Symbol('initial group key');
function* groupingSpliterator(split, {
getKey
}, source) {
const peekr = __peekerate(source);
let key = initialKey;
let idx = 0;
while (!peekr.done) {
const lastKey = key;
key = getKey(peekr.value, idx++);
if (lastKey !== key) {
yield split;
yield key;
}
yield peekr.value;
peekr.advance();
}
}
function __splitGroups(source, getKey = value => value) {
return __spliterateGrouped(source, groupingSpliterator, {
getKey
});
}
exports.__splitGroups = __splitGroups;
const splitGroups = /*#__PURE__*/iterableCurry(__splitGroups, {
minArgs: 0,
maxArgs: 1
});
exports.splitGroups = splitGroups;