Skip to content
Snippets Groups Projects
Commit f7e1e637 authored by svornost's avatar svornost
Browse files

Higher-performance toSentence implementation

parent b1b11d53
No related branches found
No related tags found
No related merge requests found
......@@ -81,23 +81,27 @@ globalThis.Categorizer = class {
* // returns "apple or banana"
*/
globalThis.toSentence = function(iterable, delimiter = ", ", lastDelimiter = " and ") {
/** @type {Array<string>} */
let r = [];
/** @type {string} */
let last = undefined;
for (const iter of iterable) {
if (last !== undefined) {
r.push(last);
const itr = iterable[Symbol.iterator]();
let output = ``;
let result = itr.next();
if (!result.done) {
// output first element
output += result.value;
result = itr.next();
if (!result.done) {
// output elements (1...n-1)
let previous = result.value;
result = itr.next();
while (!result.done) {
output += delimiter + previous;
previous = result.value;
result = itr.next();
}
// output final element
output += lastDelimiter + previous;
}
last = iter;
}
if (r.length > 0) {
return r.join(delimiter) + lastDelimiter + last;
} else if (last !== undefined) {
return last;
} else {
return "";
}
return output;
};
App.Utils.alphabetizeIterable = function(iterable) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment