2 Ways to Merge Arrays in JavaScript

2 Ways to Merge Arrays in JavaScript

2 Ways to Merge Arrays in JavaScript

Here are 2 ways to combine your arrays and return a NEW array. I like using the Spread operator. But if you need older browser support, you should use Concat.

// 2 Ways to Merge Arrays 

const cars = ['πŸš—', 'πŸš™'];
const trucks = ['🚚', 'πŸš›'];

// Method 1: Concat 
const combined1 = [].concat(cars, trucks);

// Method 2: Spread
const combined2 = [...cars, ...trucks];

// Result
// [ 'πŸš—', 'πŸš™', '🚚', 'πŸš›' ]

Alternative Concat Syntax

Alternatively, you can also write the concat method, in this regard:

const cars = ['πŸš—', 'πŸš™'];
const trucks = ['🚚', 'πŸš›'];

const combined = cars.concat(trucks);
// [ 'πŸš—', 'πŸš™', '🚚', 'πŸš›' ]

console.log(cars); // ['πŸš—', 'πŸš™'];
console.log(trucks); // ['🚚', 'πŸš›'];

As you can see, this way of writing it doesn’t manipulate or change the existing array.

Which one should I pick?

Let’s list out both versions, so you can see it in comparison.

// Version A:
const combinedA = [].concat(cars, trucks);

// Version B:
const combinedB = cars.concat(trucks);

So now the question is, which one should I pick πŸ€”. I prefer Version A because I think the intention is a lot more clear. Just by looking at it, I know I’m creating a new array and I’m not manipulating the existing array. Whereas if I look at Version B, it appears like I’m adding the trucks array to the cars array, and it doesn’t seem obvious to me that the cars array isn’t being changed. But, maybe that’s just me. I’d be curious to know what you think?

Since I don’t really have a substantial reason besides aesthetics, I think you and your team should stick with whatever you choose πŸ‘

Difference between Spread vs Concat

I prefer using spread, because I find it more concise and easier to write. BUT, there are still benefits of using concat.

Spread is fantastic when you know beforehand that you’re dealing with arrays. But what happens when the source is something else, like a string. And you want to add that string to the array. Let’s walk through an example.

Example: Dealing with an arbitrary argument

Let’s say this is the outcome we want:

[1,2,3,'random']

A. Using Spread

And if we follow the pattern we’ve been using and used the spread operator. Here’s what happens:

function combineArray(array1, array2) {
  return [...array1, array2];
}

const isArray = [1,2,3];
const notArray = 'random';

combineArray(isArray, notArray);
// 😱 [ 1, 2, 3, 'r', 'a', 'n', 'd', 'o', 'm' ]

☝️ If we spread our string, it will split the word into separate letters. So it doesn’t achieve the result we want.

B. Using Concat

BUT, if we follow the concat pattern that we’ve been doing. Here’s what happens:

function combineArray(array1, array2) {
  return [].concat(array1, array2);
}

const isArray = [1,2,3];
const notArray = 'random';

combineArray(isArray, notArray);
// βœ…  [ 1, 2, 3, 'random' ]

☝️ Excellent! We get the result we want.

I know some of you are like, duh! I’ll just write some conditional to make sure what I’m passing is an array and execute accordingly. Sure that’d work too. Or just write less code and use concat and be done with πŸ˜‚

Verdict

So here’s the quick rule. If you know you’re dealing with arrays, use spread. But if you might be dealing with the possibility with a non-array, then use concat to merge an array πŸ‘

Anyways I just want to point that out, so you can use the most appropriate method depending on the problem you’re trying to solve πŸ‘

Merge Array with Push πŸ€”

Some of you are asking, hey, can’t I also use push to merge an array. And yes, you sure can! But when you use push, it manipulates or changes the existing array. It does NOT create a new array. So depending on what you’re trying to do. Make sure you keep that in mind.

const cars = ['πŸš—', 'πŸš™'];
const trucks = ['🚚', 'πŸš›'];

const combined = cars.push(...trucks);

console.log(combined); // 4
// ☝when you use push, it returns the LENGTH of the combined array

console.log(cars); // [ 'πŸš—', 'πŸš™', '🚚', 'πŸš›' ]
console.log(trucks); // ['🚚', 'πŸš›']

Also, when you’re trying to push an array to another array. You will need to spread it, otherwise, you will end up getting a nested array. Of course, unless that’s what you wanted 😜

const cars = ['πŸš—', 'πŸš™'];
const trucks = ['🚚', 'πŸš›'];

cars.push(trucks);
// 😱 cars: [ 'πŸš—', 'πŸš™', [ '🚚', 'πŸš›' ] ]

cars.push(...trucks);
// βœ… cars: [ 'πŸš—', 'πŸš™', '🚚', 'πŸš›' ]

Browser Support

Spread was introduced in ES6, so all modern browser supports it. Except for the β€œI’m too cool” Internet Explorer - no support there πŸ˜•. So if you need IE support, you want to use concat instead or use a compiler like Babel.

javascript

Bootstrap 5 Complete Course with Examples

Bootstrap 5 Tutorial - Bootstrap 5 Crash Course for Beginners

Nest.JS Tutorial for Beginners

Hello Vue 3: A First Look at Vue 3 and the Composition API

Building a simple Applications with Vue 3

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

The essential JavaScript concepts that you should understand

The essential JavaScript concepts that you should understand - For successful developing and to pass a work interview

Data Types In JavaScript

JavaScript data types are kept easy. While JavaScript data types are mostly similar to other programming languages; some of its data types can be unique. Here, we’ll outline the data types of JavaScript.

JavaScript Memory Management System

The main goal of this article is help to readers to understand that how memory management system performs in JavaScript. I will use a shorthand such as GC which means Garbage Collection. When the browsers use Javascript, they need any memory location to store objects, functions, and all other things. Let’s deep in dive that how things going to work in GC.

Create a Line Through Effect with JavaScript

In this post we are going to create an amazing line through effect, with help of CSS and lots of JavaScript. So, head over to your terminal and create a folder LineThroughEffect. Create three files -index.html, main.js and styles.css inside it.

Grokking Call(), Apply() and Bind() Methods in JavaScript

In this article, we will have a look at the call(), apply() and bind() methods of JavaScript. Basically these 3 methods are used to control the invocation of the function.