Перейти к содержимому

Как склеить два массива js

  • автор:

Array.prototype.flat()

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020 .

Метод flat() возвращает новый массив, в котором все элементы вложенных подмассивов были рекурсивно «подняты» на указанный уровень depth.

Синтаксис

var newArray = arr.flat(depth);

Параметры

depth Необязательный

На сколько уровней вложенности уменьшается мерность исходного массива. По умолчанию 1.

Возвращаемое значение

Новый массив с объединёнными в него подмассивами.

Примеры

Упрощение вложенных массивов

var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6] var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]; arr4.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Упрощение и «дырки» в массивах

Метод flat удаляет пустые слоты из массива:

var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5] 

Альтернативы

reduce и concat

var arr1 = [1, 2, [3, 4]]; arr1.flat(); // В одномерный массив arr1.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4] //или const flatSingle = (arr) => [].concat(. arr); 
// Для развёртывания многомерных массивов используем рекурсию, reduce и concat const arr = [1, 2, [3, 4, [5, 6]]]; function flatDeep(arr, d = 1)  return d > 0 ? arr.reduce( (acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [], ) : arr.slice(); > flatDeep(arr, Infinity); // [1, 2, 3, 4, 5, 6] 
//не рекурсивное упрощение с использованием стэка var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]]; function flatten(input)  const stack = [. input]; const res = []; while (stack.length)  // забираем последнее значение const next = stack.pop(); if (Array.isArray(next))  // добавляем к массиву элементы не модифицируя исходное значение stack.push(. next); > else  res.push(next); > > //разворачиваем массив, чтобы восстановить порядок элементов return res.reverse(); > flatten(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4] 
//рекурсивно упрощаем массив function flatten(array)  var flattend = []; (function flat(array)  array.forEach(function (el)  if (Array.isArray(el)) flat(el); else flattend.push(el); >); >)(array); return flattend; > 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.flat

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • Array.prototype.flatMap()
  • Array.prototype.map()
  • Array.prototype.reduce()
  • Array.prototype.concat()

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 4 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

Всё только о JavaScript

Иногда необходимо объединить несколько массивов в один, содержащий элементы из исходных массивов. Для этого в JavaScript есть метод concat . Он создаёт копию исходного массива, добавляя к нему переданные аргументы, подобно методу push . Однако, в отличие от push , если методу concat передан другой массив, то будут добавлены элементы этого массива, а не сам массив единственным элементом.

Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; var a = [1, 2, 3]; alert(a.concat(4, 5, 6)); // [1, 2, 3, 4, 5, 6] alert(a.concat([4, 5], [6])); // [1, 2, 3, 4, 5, 6] 

Однако дальше одного уровня concat аргументы-массивы не разворачивает.

Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; var a = [1, 2, 3]; alert(a.concat([4, [5], 6])); // [1, 2, 3, 4, [5], 6] 

С разреженными массивами ситуация обстоит ожидаемая: пропуски как из исходного массива, так и из массивов-аргументов, сохраняются.

Array.prototype.toString = function() < return '[' + this.join(', ') + ']'; >; var a = [1, , 3]; alert(a.concat([4, , 6])); // [1, , 3, 4, , 6] 

Деление массива

Метод slice имеет сигнатуру slice(begin[, end]) и возвращает подмассив исходного массива, начиная с индекса begin и заканчивая индексом end — 1 . Чтобы легче запомнить такую странную нумерацию, лучше считать, что передаются индексы не элементов, а «межэлементного пространства».

Индексы элементов: 0 1 2 3 4 5 6 7 8 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | Индексы для slice: 0 1 2 3 4 5 6 7 8 9 

Тогда становится понятно, что ar.slice(0, 1) вернёт только нулевой элемент, а slice(5, 9) — с пятого по восьмой элементы.

var a = [0, 1, 2, 3, 4, 5]; alert(a.slice(0, 2)); // 0,1 alert(a.slice(4, 5)); // 4 

Если второй аргумент является отрицательным числом, то отсчёт второго индекса идёт с конца массива.

var a = [0, 1, 2, 3, 4, 5]; alert(a.slice(0, -2)); // 0,1,2,3 

Если же второй аргумент не передан вообще, то возвращается копия массива от begin до конца.

var a = [0, 1, 2, 3, 4, 5]; alert(a.slice(3)); // 3,4,5 

Клонирование массива

В JavaScript нет нативного метода для клонирования массивов, однако его легко сэмулировать, помня, что concat и slice не меняют исходный массив. Достаточно вызвать метод concat без аргументов или метод slice с единственным аргументом равным 0 .

var a = [1, 2, 3]; var b = a.concat(); var c = a.slice(0); alert(a + ' ; ' + b + ' ; ' + c); // 1,2,3 ; 1,2,3 ; 1,2,3 alert([a == b, a == c, b == c]); // false,false,false 

Обратите внимание, если в массиве лежат ссылки на объекты, в том числе ссылки на другие массивы, то в новосозданном массиве будут лежать ссылки на те же самые объекты. Поэтому если вы хотите клонировать многомерный массив, то придётся вручную создавать новый массив, после чего перебрать подмассивы исходного массива и клонировать их в новый.

// Клонируется только массив верхнего уровня var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var b = a.concat(); alert(a[0][1]); // 2 alert(b[0][1]); // 2 b[0][1] = 15; alert(a[0][1]); // 15 // Клонируем вложенные массивы var a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var b = []; a.forEach(function(subArray) < b.push(subArray.concat()); >); alert(a[0][1]); // 2 alert(b[0][1]); // 2 b[0][1] = 15; alert(a[0][1]); // 2 

Array.prototype.concat()

Метод concat() возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов.

Интерактивный пример

Синтаксис

var new_array = old_array.concat(value1[, value2[, . [, valueN]]])

Параметры

Массивы и/или значения, соединяемые в новый массив. Смотрите описание ниже.

Возвращаемое значение

Описание

Метод concat создаёт новый массив, состоящий из элементов в объекте, на котором он был вызван, за которыми по порядку следуют, для каждого аргумента, все его элементы (если аргумент является массивом), либо сам аргумент (если он массивом не является).

Метод concat не изменяет данный массив или любой из массивов, переданных в аргументах, а вместо этого возвращает поверхностную копию, содержащую копии тех элементов, что были объединены с исходными массивами. Элементы оригинальных массивов копируются в новый массив по следующим правилам:

  • Ссылки на объекты (но не фактические объекты): метод concat копирует ссылки на объекты в новый массив. И оригинал, и новый массив ссылаются на один и тот же объект. То есть, если объект по ссылке будет изменён, изменения будут видны и в новом, и в исходном массивах.
  • Строки, числа и булевы значения (но не объекты String , Number или Boolean ): метод concat копирует значения строк и чисел в новый массив.

Примечание: Соединение массивов и/или значений в новый массив оставит соединяемые массивы/значения неизменными. Кроме того, любая операция над новым массивом (если только элемент не является ссылкой) не будет затрагивать исходные массивы и наоборот.

Примеры

Соединение двух массивов

Следующий код соединяет два массива:

var alpha = ["a", "b", "c"], numeric = [1, 2, 3]; var alphaNumeric = alpha.concat(numeric); console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3] 

Соединение трёх массивов

Следующий код соединяет три массива:

var num1 = [1, 2, 3], num2 = [4, 5, 6], num3 = [7, 8, 9]; var nums = num1.concat(num2, num3); console.log(nums); // Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9] 

Соединение значений в массив

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

var alpha = ["a", "b", "c"]; var alphaNumeric = alpha.concat(1, [2, 3]); console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3] 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.concat

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • push / pop — добавление / удаление элементов с конца массива
  • unshift / shift — добавление / удаление элементов с начала массива
  • splice — добавление / удаление элементов в указанной позиции массива
  • String.prototype.concat()
  • Symbol.isConcatSpreadable — управление уменьшением размерности массива

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 4 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Как объединить два массива объектов в один массив?

Есть два массива объектов, их нужно объединить по следующему принципу, количество объектов в первом массиве всегда, по условию, совпадает с количеством объектов во втором массиве.

let first = [ , ] let second = [ , ] //// Результат должен быть таким [ < name: 'Maxim', secondName: 'Ivanov', age: 20 >, < name: 'Lena', secondName: 'Kirolova' , age: 18 >]
  • Вопрос задан более трёх лет назад
  • 4959 просмотров

Комментировать
Решения вопроса 1

yarkov

Алексей Ярков @yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.

let first = [ , ]; let second = [ , ]; let third = first.map((item, index) => ()); console.log(third);

Ответ написан более трёх лет назад
Нравится 2 2 комментария
Anton8989 @Anton8989 Автор вопроса

yarkov

Алексей Ярков @yarkov Куратор тега JavaScript
Anton8989, пожалуйста ))
Ответы на вопрос 1

lookreciuspin

Br0k3n C1rcu1t @lookreciuspin
Data recovery and truth revelation hacker

Предлагаю прогулятся до MDN

Метод concat() возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов.

Соединение двух массивов
Следующий код соединяет два массива:

var alpha = ['a', 'b', 'c'], numeric = [1, 2, 3]; var alphaNumeric = alpha.concat(numeric); console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *