diff --git a/src/js/utilsMisc.js b/src/js/utilsMisc.js index 98b77590719c035930c9f0c2d3f19f9effe431d4..87c62482f4da74d3f834de6102145b7c21465ccb 100644 --- a/src/js/utilsMisc.js +++ b/src/js/utilsMisc.js @@ -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) {