Каков наиболее эффективный способ объединения N массивов объектов в JavaScript?
Массивы являются изменяемыми, и результат может быть сохранен в одном из входных массивов.
javascript
arrays
Леонид
источник
источник
Ответы:
Если вы объединяете более двух массивов,
concat()
это путь для удобства и вероятной производительности.Для объединения только двух массивов можно использовать тот факт, что
push
для добавления в массив можно использовать несколько аргументов, состоящих из элементов, добавляемых в массив, без создания нового массива. Сslice()
ним также можно использовать вместо,concat()
но, как представляется, это не дает никакого преимущества в производительности .В ECMAScript 2015 и более поздних версиях это можно уменьшить еще больше до
Однако, похоже, что для больших массивов (порядка 100 000 членов или более) метод передачи массива элементов
push
(с использованиемapply()
или оператора распространения ECMAScript 2015) может дать сбой. Для таких массивов лучше использовать цикл. См. Https://stackoverflow.com/a/17368101/96100 для получения подробной информации.источник
a.concat(b)
контрольный пример, кажется, напрасно делает копию массива, аa
затем выбрасывает его.concat()
обычно это происходит быстрее. Для случая объединения массива в существующий массив на месте,push()
это путь. Я обновил свой ответ.редактировать : доказательство эффективности: http://jsperf.com/multi-array-concat/7
edit2 : Тим Супини упоминает в комментариях, что это может привести к тому, что интерпретатор превысит размер стека вызовов. Возможно, это зависит от движка js, но я также получил "Максимальный размер стека вызовов превышен" по крайней мере в Chrome. Тестовый пример:
[].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))
. (Я также получил ту же ошибку при использовании принятого в настоящее время ответа, поэтому можно ожидать таких случаев использования или создавать библиотеку для других, поэтому может потребоваться специальное тестирование независимо от того, какое решение вы выберете.)источник
Для людей, использующих ES2015 (ES6)
Теперь вы можете использовать синтаксис Spread для объединения массивов:
источник
concat()
Метод используется для соединения двух или более массивов. Он не изменяет существующие массивы, он только возвращает копию объединенных массивов.источник
concat
специально используется для создания новых массивов без изменения исходного массива. Если вы хотите обновитьarray1
, вы должны будете использоватьarray1.push(...array2, ...array3, ...array4)
Используйте Array.prototype.concat.apply для обработки конкатенации нескольких массивов:
Пример:
источник
Если вы находитесь в процессе передачи результата через карту / фильтр / сортировку и т. Д. И хотите объединить массив массивов, вы можете использовать
reduce
источник
Для массива из нескольких массивов и ES6 используйте
Например:
источник
newArr = Array.from(new Set(newArr));
.any[]
? Печатание там - странно.[].concat.apply([], ...arr)
работает значительно лучше на больших объемах.Теперь мы можем объединить несколько массивов, используя
ES6
Spread
. Вместо того,concat()
чтобы использовать для объединения массивов, попробуйте использовать синтаксис расширения, чтобы объединить несколько массивов в один плоский массив. например:источник
решено так
источник
Вы можете использовать сайт jsperf.com для сравнения производительности. Вот ссылка на Конкат .
Добавлено сравнение между:
и:
Второй почти в 10 раз медленнее хрома.
источник
push.apply()
, что, кажется, быстрее, чемconcat()
во всех браузерах, кроме Chrome. Смотри мой ответ.Легко с функцией concat:
источник
Вот функция, с помощью которой вы можете объединить несколько массивов
Пример -
будет выводить
источник
Объединить массив с Push:
Использование оператора Concat и Spread:
источник
Если у вас есть массив массивов и вы хотите объединить элементы в один массив, попробуйте следующий код (требуется ES2015):
Или если вы в функциональном программировании
Или даже лучше с синтаксисом ES5, без оператора распространения
Этот способ удобен, если вы не знаете, нет. массивов во время кода.
источник
Укоротить с ES6.
Это делает конкат и уникальным множественные массивы;
Демо на коде
источник
new Set()
удаляет дубликаты Просто удали это.[].concat(...Array)
где 'n' - это некоторое количество массивов, возможно, массив массивов. , ,
var answer = _.reduce (n, function (a, b) {return a.concat (b)})
источник
Если есть только два массива для объединения, и вам действительно нужно добавить один из массивов, а не создавать новый, путь или цикл - это путь.
Тест: https://jsperf.com/concat-small-arrays-vs-push-vs-loop/
источник
попробуй это:
источник
если N-массивы получены из базы данных, а не жестко закодированы, я сделаю это, используя ES6
источник