Serialize Lists

Serialize a list of an unknown number of items into proper English.

by nate

JavaScript

var $body = $('body'),
    list1 = ['alpha'],
    list2 = ['alpha', 'beta'],
    list3 = ['alpha', 'beta', 'gamma'];

function serialize(list) {
    var length = list.length,
        lastIndex = length - 1,
        serializedList = '';
    
    list.forEach(function (item, i) {
        serializedList += item;
        if (i < lastIndex) {
            if (length > 2) {
                // We support the Oxford comma
                serializedList += ', ';
                if (i === lastIndex - 1) {
                    serializedList += 'and ';
                }
            } else {
                serializedList += ' and ';
            }
        }
    });
    
    return serializedList;
};

$('<p>').text(serialize(list1)).appendTo($('body'));
$('<p>').text(serialize(list2)).appendTo($('body'));
$('<p>').text(serialize(list3)).appendTo($('body'));