You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
/**
|
|
* @param {Array.<string>} list
|
|
* @param {number} fromInclusive
|
|
* @param {number} toExclusive
|
|
* @param {string} delimiterChar one character string
|
|
* @returns {string}
|
|
*/
|
|
function joinList(list, fromInclusive, toExclusive, delimiterChar) {
|
|
if (list.length === 0) {
|
|
return '';
|
|
}
|
|
if (delimiterChar.length !== 1) {
|
|
throw Error('Delimiter is expected to be a character, but "' + delimiterChar + '" received');
|
|
}
|
|
var addDelimiter = false
|
|
, escapeChar = '\\'
|
|
, escapeCharCode = escapeChar.charCodeAt(0)
|
|
, delimiterCharCode = delimiterChar.charCodeAt(0)
|
|
, result = ''
|
|
, item
|
|
, itemLength
|
|
, ch
|
|
, chCode;
|
|
for (var itemId = fromInclusive; itemId < toExclusive; itemId++) {
|
|
if (addDelimiter) {
|
|
result += delimiterChar;
|
|
}
|
|
addDelimiter = true;
|
|
item = list[itemId];
|
|
itemLength = item.length;
|
|
for (var i = 0; i < itemLength; i++) {
|
|
ch = item.charAt(i);
|
|
chCode = item.charCodeAt(i);
|
|
if (chCode === delimiterCharCode || chCode === escapeCharCode) {
|
|
result += escapeChar;
|
|
}
|
|
result += ch;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
exports.joinList = joinList;
|