Всё только о JavaScript

/ Статьи / Массивы в JavaScript

Создание строки из элементов массива

Для объединения всех элементов массива в одну строку используется метод массива join, принимающий единственным аргументом строку, которой необходимо разделить элементы.

var a = [1, 2, 3, 4];
alert(a.join('-'));   // 1-2-3-4

Метод join объединяет элементы для каждого индекса от 0 до length - 1, при этом значения undefined и null преобразуются в пустую строку, остальные элементы приводятся к строке.

var a = [1, , null, undefined, 2];
alert(a.join('-'));   // 1----2

В спецификации языка указано

If no separator is provided, a single comma is used as the separator.

Т.е. если сепаратор не был передан, то в качестве него нужно использовать запятую. Данное предложение, однако, можно трактовать двояко: сепаратор не передан вообще или в качестве сепаратора передан undefined. Впрочем чуть ниже в спецификации указана чёткая инструкция.

If separator is undefined, let separator be the single-character string ",".

Т.е. если сепаратор равен undefined, то используется запятая. Именно такое поведение реализуют все браузеры, кроме Internet Explorer. IE подставляет запятую, только если join был вызван без аргументов.

var a = [1, 2, 3, 4];
alert(a.join());             // 1,2,3,4 во всех браузерах
alert(a.join(undefined));    // 1undefined2undefined3undefined4 в IE, 1,2,3,4 в остальных браузерах

Метод join можно использовать также для элегантной реализации повторения строки, т.е. из строки 'ab', например, получить строку 'abababab'. Действительно, пустые элементы массива преобразуются в пустые строки, но при этом разделяются сепаратором. Следовательно, чтобы повторить строку n раз, нужно взять пустой массив, у которого length равен n + 1, и вызвать у него метод join с аргументом, равным размножаемой строке.

/**
 * Повторяет исходную строку n раз.
 * @param {Number} n Число повторений строки
 * @return {String} Размноженная строка.
 */
String.prototype.times = function(n) {
    return new Array(n + 1).join(this);
};

alert('01'.times(4));  // 01010101

Массивы, как и любой другой объект в JavaScript, имеют встроенный метод toString, вызываемый при неявном преобразовании в строку. Этот метод у них аналогичен вызову метода join без аргументов, т.е. элементы разделяются запятой.

var str = 'ab', a = [1, 2, 3, 4];
alert(str + a);   // ab1,2,3,4

Для отладочных целей можно во время разработки переопределять toString так, чтобы добавлялись квадратные скобки в начале и в конце массива, тогда будет легче просматривать вложенные массивы.

var a = [1, 2, ['a', 'b', 'c'], 3, 4];
alert(a);      // 1,2,a,b,c,3,4
Array.prototype.toString = function() {
    return '[' + this.join(', ') + ']';
};
alert(a);      // [1, 2, [a, b, c], 3, 4]

Создание массива из строки

Для обратного преобразования строки в массив у строк есть метод split, аналогично join принимающий разделитель, по которому требуется разбить строку.

var str = '1-2-3-4';
alert(str.split('-'));  // 1,2,3,4

Обратите внимание, что если вызвать split у пустой строки, то мы получим не пустой массив, а массив с одним элементом, равным пустой строке.

var a = ''.split(',');
alert([a.length, a[0] == '']);   // 1,true