Відповіді:
Якщо ви об'єднуєте більше двох масивів, concat()
це шлях для зручності та ймовірності продуктивності.
var a = [1, 2], b = ["x", "y"], c = [true, false];
var d = a.concat(b, c);
console.log(d); // [1, 2, "x", "y", true, false];
Для об'єднання лише двох масивів той факт, що push
приймає декілька аргументів, що складаються з елементів для додавання до масиву, може використовуватися замість цього для додавання елементів з одного масиву в кінець іншого, не створюючи нового масиву. З slice()
його допомогою можна використовувати і замість цього, concat()
але , мабуть, немає переваги у виконанні цього .
var a = [1, 2], b = ["x", "y"];
a.push.apply(a, b);
console.log(a); // [1, 2, "x", "y"];
У ECMAScript 2015 і пізніших версіях це може бути зменшено ще більше
a.push(...b)
Однак, схоже, що для великих масивів (порядку 100 000 членів або більше) техніка передачі масиву елементів push
(або використовуючи apply()
оператор розповсюдження ECMAScript 2015) може не мати успіху. Для таких масивів кращим підходом є використання циклу. Докладніше дивіться на https://stackoverflow.com/a/17368101/96100 .
a.concat(b)
здається, тестовий випадок не потребує копії масиву, a
а потім викидання його.
concat()
правило, швидше. У випадку об'єднання масиву на існуючий на місці масив push()
- це шлях. Я оновив свою відповідь.
[].concat.apply([], [array1, array2, ...])
редагувати : доказ ефективності: http://jsperf.com/multi-array-concat/7
edit2 : Тім Супіні в коментарях зазначає, що це може призвести до того, що перекладач перевищить розмір стека викликів. Це, можливо, залежить від двигуна js, але я також отримав "Максимальний розмір стека викликів" у Chrome принаймні. Тестовий приклад: [].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))
. (Я також отримав ту саму помилку, використовуючи прийнятий на даний момент відповідь, тому можна передбачити такі випадки використання або створити бібліотеку для інших. Можливо, необхідне спеціальне тестування незалежно від того, яке рішення ви обрали.)
Тепер ви можете використовувати синтаксис Spread для об'єднання масивів:
const arr1 = [0, 1, 2],
arr2 = [3, 4, 5];
const result1 = [...arr1, ...arr2]; // -> [0, 1, 2, 3, 4, 5]
// or...
const result2 = [...arr2, ...arr1]; // -> [3, 4, 5, 0, 1, 2]
concat()
Метод використовується для з'єднання двох або більше масивів. Він не змінює існуючі масиви, він лише повертає копію об'єднаних масивів.
array1 = array1.concat(array2, array3, array4, ..., arrayN);
concat
спеціально використовується для створення нових масивів без мутації вихідного масиву. Якщо ви хочете оновити array1
, вам доведеться скористатисяarray1.push(...array2, ...array3, ...array4)
Використовуйте Array.prototype.concat.apply для обробки об'єднання декількох масивів:
var resultArray = Array.prototype.concat.apply([], arrayOfArraysToConcat);
Приклад:
var a1 = [1, 2, 3],
a2 = [4, 5],
a3 = [6, 7, 8, 9];
Array.prototype.concat.apply([], [a1, a2, a3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
Якщо ви перебуваєте в середині передачі результату через карту / фільтр / сортування тощо, і ви хочете скоротити масив масивів, ви можете використовувати reduce
let sorted_nums = ['1,3', '4,2']
.map(item => item.split(',')) // [['1', '3'], ['4', '2']]
.reduce((a, b) => a.concat(b)) // ['1', '3', '4', '2']
.sort() // ['1', '2', '3', '4']
Для масиву декількох масивів та ES6 використовуйте
Array.prototype.concat(...arr);
Наприклад:
const arr = [[1, 2, 3], [4, 5, 6], [7, 8 ,9]];
const newArr = Array.prototype.concat(...arr);
// output: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
newArr = Array.from(new Set(newArr));
.
any[]
? Введення тексту там - дивне.
[].concat.apply([], ...arr)
набагато краще в великих обсягах.
Тепер ми можемо комбінувати декілька масивів за допомогою ES6
Spread
. Замість використання concat()
для об'єднання масивів спробуйте використовувати синтаксис розширення для об'єднання декількох масивів в один сплющений масив. наприклад:
var a = [1,2];
var b = [3,4];
var c = [5,6,7];
var d = [...a, ...b, ...c];
// resulting array will be like d = [1,2,3,4,5,6,7]
Ви можете використовувати сайт jsperf.com для порівняння ефективності. Ось посилання на конкомат .
Додано порівняння між:
var c = a.concat(b);
і:
var c = [];
for (i = 0; i < a.length; i++) {
c.push(a[i]);
}
for (j = 0; j < b.length; j++) {
c.push(b[j]);
}
Другий майже в 10 разів повільніше хромований.
push.apply()
, що здається швидше, ніж concat()
у всіх браузерах, крім Chrome. Дивіться мою відповідь.
Легко за допомогою функції concat:
var a = [1,2,3];
var b = [2,3,4];
a = a.concat(b);
>> [1,2,3,2,3,4]
Ось функція, за допомогою якої ви можете об'єднати декілька масивів
function concatNarrays(args) {
args = Array.prototype.slice.call(arguments);
var newArr = args.reduce( function(prev, next) {
return prev.concat(next) ;
});
return newArr;
}
Приклад -
console.log(concatNarrays([1, 2, 3], [5, 2, 1, 4], [2,8,9]));
виведе
[1,2,3,5,2,1,4,2,8,9]
Якщо у вас є масив масивів і ви хочете сформулювати елементи в єдиний масив, спробуйте наступний код (Потрібно ES2015):
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = [];
for (let arr of arrOfArr) {
newArr.push(...arr);
}
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
Або якщо ви займаєтесь функціональним програмуванням
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = arrOfArr.reduce((result,current)=>{
result.push(...current);
return result;
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
Або ще краще з синтаксисом ES5, без оператора розповсюдження
var arrOfArr = [[1,2,3,4],[5,6,7,8]];
var newArr = arrOfArr.reduce((result,current)=>{
return result.concat(current);
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
Цей спосіб зручний, якщо ви не знаєте ні. масивів на час коду.
Скоротіть з ES6.
new Set([].concat(...Array));
Це робить стислим і унікальним кілька масивів;
new Set()
видаляє повторювані елементи. Просто видаліть його. [].concat(...Array)
Об’єднати масив із натисканням:
const array1 = [2, 7, 4];
const array2 = [3, 5,9];
array1.push(...array2);
console.log(array1)
Використання оператора Concat і Spread:
const array1 = [1,2];
const array2 = [3,4];
// Method 1: Concat
const combined1 = [].concat(array1, array2);
// Method 2: Spread
const combined2 = [...array1, ...array2];
console.log(combined1);
console.log(combined2);
Якщо є лише два масиви для конкатування, і вам фактично потрібно додати один з масивів, а не створювати новий, натисніть або петлю - це шлях.
Орієнтир: https://jsperf.com/concat-small-arrays-vs-push-vs-loop/
спробуйте це:
i=new Array("aaaa", "bbbb");
j=new Array("cccc", "dddd");
i=i.concat(j);
якщо N масивів отримано з бази даних, а не жорстко закодовано, я зроблю це так, використовуючи ES6
let get_fruits = [...get_fruits , ...DBContent.fruit];