31 lines
809 B
JavaScript
31 lines
809 B
JavaScript
/**
|
|
* Interleave the items from all the lists so that the first items are first
|
|
* in the returned list, the second items are next etc.
|
|
* Does this in a O(n) fashion, and return lists[0] if there is only one list.
|
|
*
|
|
* @param {[]} lists
|
|
* @returns [] reordered to be breadth first traversal of lists
|
|
*/
|
|
export default function interleave(lists) {
|
|
if (!lists || !lists.length) {
|
|
return [];
|
|
}
|
|
if (lists.length === 1) {
|
|
return lists[0];
|
|
}
|
|
console.time('interleave');
|
|
const useLists = [...lists];
|
|
const ret = [];
|
|
for (let i = 0; useLists.length > 0; i++) {
|
|
for (const list of useLists) {
|
|
if (i >= list.length) {
|
|
useLists.splice(useLists.indexOf(list), 1);
|
|
continue;
|
|
}
|
|
ret.push(list[i]);
|
|
}
|
|
}
|
|
console.timeEnd('interleave');
|
|
return ret;
|
|
}
|