mirror of
https://github.com/arthur-pbty/portfolio2023.git
synced 2026-06-04 15:56:24 +02:00
38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
var has = Function.call.bind(Object.prototype.hasOwnProperty);
|
|
var join = Function.call.bind(Array.prototype.join);
|
|
var trim = Function.call.bind(String.prototype.trim);
|
|
var isArray = Array.isArray;
|
|
var filter = Function.call.bind(Array.prototype.filter);
|
|
var slice = Function.call.bind(Array.prototype.slice);
|
|
var concat = Function.call.bind(Array.prototype.concat);
|
|
|
|
module.exports = function listify(list) {
|
|
if (!isArray(list)) {
|
|
throw new TypeError('requires an array');
|
|
}
|
|
|
|
var options = arguments.length > 1 ? arguments[1] : null;
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
var separator = has(options, 'separator') ? options.separator : ', ';
|
|
var finalWord = has(options, 'finalWord') ? options.finalWord : 'and';
|
|
if (finalWord.length > 0) {
|
|
finalWord += ' ';
|
|
}
|
|
|
|
var trimmed = filter(list, trim);
|
|
var str;
|
|
if (trimmed.length === 2 && finalWord.length > 0) {
|
|
str = join(trimmed, ' ' + finalWord);
|
|
} else if (trimmed.length < 3) {
|
|
str = join(trimmed, separator);
|
|
} else {
|
|
str = join(concat(slice(trimmed, 0, -1), finalWord + trimmed[trimmed.length - 1]), separator);
|
|
}
|
|
return str;
|
|
};
|
|
|