вторник, 20 августа 2013 г.

Разделяем элементы массива

Последнее время меня мучила небольшая задачка по добавлению разделителей любого типа (не только строки, но и объекты, другие массивы) между всеми элементами данного массива. То есть что-то вроде Array#join(separator), но чтобы на выходе получался массив, а не строка.

Например:
[1, 2, 3] => [1, 'sep', 2, 'sep', 3]

Естественно, задачка очень проста и решается кучей различных способов. Моей проблемой является не нахождение решения, а поиск его наиболее элегантного варианта.

Я перепробовал массу вариантов, но постоянно внутренний мир был недоволен. Хотелось, конечно, сделать в функциональном стиле, но красиво не вышло.

Совесть замолчала на следующей конечной реализации:

function insertSeparator(array, separator) {
    var index = array.length - 1;
    while (index) array.splice(index--, 0, separator);
    return array;
}

Можно легко переделать как на расширение прототипа, так и на неразрущающий вариант.

А как выглядит элегантное решение на вашем языке?

Хорошего дня!