Для объединения всех элементов массива в одну строку используется метод массива 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