Javascript.RU

concat

Синтаксис

var newArray = array.concat(value1, value2, ..., valueN)

Аргументы

value1, value2, ...
Массивы или значения для присоединения

Описание, примеры

Создает новый массив.

Копирует в него текущий объект array и значения value1, value2, ...

При этом, если значение является массивом, то в результат попадут его элементы (в отличие от push), а не сам аргумент.

Метод concat ничего не меняет. Вместо этого он просто возвращает комбинацию "в один уровень глубиной" текущего объекта и аргументов.

Элементы аргументов-массивов добавляются в результат следующим образом:

Объекты
Копируется ссылка на объект. Таким образом, старый и новый массив ссылаются на один и тот же объект. Если объект меняется - эти изменения видны и в новом и в старом массивах.
Элементарные значения
Копируются "как есть"
Пример: объединение двух массивов
var alpha = ["a", "b", "c"];
var numeric = [1, 2, 3];

// создает массив ["a", "b", "c", 1, 2, 3]; 
var alphaNumeric = alpha.concat(numeric);
Пример: объединение трех массивов
var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9];

// создает массив [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
var nums = num1.concat(num2, num3);
Пример: добавление значений в массив
var alpha = ['a', 'b', 'c'];

// создает массив ["a", "b", "c", 1, 2, 3]
var alphaNumeric = alpha.concat(1, [2, 3]);

Автор: Гость (не зарегистрирован), дата: 29 января, 2010 - 23:23
#permalink

"Объекты
Копируется ссылка на объект. Таким образом, старый и новый массив ссылаются на один и тот же объект. Если объект меняется - эти изменения видны и в новом и в старом массивах."

var MyArr= new Array(1,2,3,4,5,6);
			var NewArr= new Array(6,5,4,3,2,1);
			var Result=MyArr.concat(NewArr);
			alert(Result);
			MyArr[0]=0;
			alert(Result);

почему же значение не меняется?


Автор: Мараторий, дата: 30 января, 2010 - 01:15
#permalink

Потому что здесь:

var Result=MyArr.concat(NewArr);

присваивается не ссылка на MyArr, а создается новый массив, ссылка на который записывается в Result.


Автор: Гость (не зарегистрирован), дата: 1 марта, 2010 - 23:29
#permalink

если не понял, замени MyArr[0]=0 на Result[0]=0


Автор: ArtIMen (не зарегистрирован), дата: 31 января, 2011 - 13:42
#permalink

Потому что в массиве у тебя не объекты, а элементарные значения. Чтобы значение менялось, нужно создавать объект, например, Number(6), и менять уже его.


Автор: Гость (не зарегистрирован), дата: 21 января, 2011 - 04:37
#permalink

если объединение двух массивов - массив, то с ним можно работать, как с массивом. Тогда почему не работает код:
array1= new Array ("Первый", "Второй", "Третий");
аrray2 = new Array ("Один", "Два", "Три") ;
document.write (array1.concat(array2).join ())


Автор: Гость (не зарегистрирован), дата: 21 января, 2011 - 04:54
#permalink

вопрос снят. Найдена ошибка в коде (у переменной array2 при объявлении первая буква русская). Спасибо Firebug)


Автор: Гость (не зарегистрирован), дата: 2 июня, 2014 - 10:46
#permalink

В реализации concat под Google Chrome есть замечательный bug который google упорно не хочет исправлять.

var a1 = []; a1.length=2;
alert( [].concat(0, 1, a1, 0.3, 5, 6) );
alert( [].concat(0, 1, a1, 3, 5, 6) );

если один из аргументов, в данном случае 0.3, меньше 1, то конец списка обрезается. Во втором alert всегда показываются все элементы.

Все остальные проверенные браузеры ведут себя корректно.


Автор: Гость (не зарегистрирован), дата: 18 марта, 2015 - 11:51
#permalink

исправили


Автор: Лера (не зарегистрирован), дата: 28 ноября, 2014 - 12:41
#permalink

а как написать функцию которая объединяла бы массивы и потом вызвать ее?
Спасибо


Автор: ruslan_mart, дата: 26 декабря, 2014 - 15:45
#permalink

Кому нужно, чтобы новый массив не возвращался, а записывался в исходный, то вот аналог:

var a = ['a', 'b'];
var b = ['b', 'c'];

[].push.apply(a, b);

alert(a);

Автор: Гость (не зарегистрирован), дата: 23 октября, 2015 - 10:34
#permalink

По поводу [].push.apply для больших массивов - https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Ob...

"Но будьте осторожны: при использовании метода apply() таким образом вы рискуете выйти за пределы ограничения на количество аргументов в движке JavaScript. Последствия применения функции с очень большим количеством аргументов (думается, больше десяти тысяч аргументов) различаются от движка к движку (JavaScriptCore имеет жёстко зашитое ограничение на количество аргументов в 65536), поскольку этот предел (на самом деле, это природа поведения любого чрезвычайно огромного стека) не определён. Некоторые движки будут выкидывать исключение. Хуже того, другие просто отбрасывают реально переданные функции аргументы сверх лимита."


 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum