Skip to content

How To Prevent cannot read property map of undefined

The "cannot read property map of undefined" error occurs when we try to call the map method on a variable that stores an undefined or null value.

Gopi Gorantala
Gopi Gorantala
9 min read
How To Prevent cannot read property map of undefined

Table of Contents

Introduction

The "cannot read property map of undefined" error occurs when we try to call the map method on a variable that stores an undefined or null value.

This error commonly arises when you try to use the map function on a variable that is not an array or does not exist.

In JavaScript, a variable is said to be undefined if it has been declared but not initialized. In simple words, when we do not assign any value to a variable, the JavaScript engine treats it as undefined.

How to replicate this error?

There are two ways to replicate this error:

Undefined variable

Following are the two ways the JavaScript engine treats a variable as undefined.

  1. When we assign undefined to a variable.
let data = undefined;

2. When we declare a variable without assigning any value.

let data;

In both of the above snippets, we cannot call map() method on a variable that has an undefined value.

const undefinedVariable = undefined;

undefinedVariable.map(item => {
  // This code will not execute since the error occurs before reaching this point
});

In the above code undefinedVariable is intentionally set to undefined. When you attempt to call the map function on this variable, it will result in the "TypeError: Cannot read property 'map' of undefined" error. This error occurs because undefined does not have a map method.

Null Variable

Note that this error can also occur if you try to call the map function on a variable that is null:

const nullVariable = null;

nullVariable.map(item => {
  // This code will not execute since the error occurs before reaching this point
});

In this case, calling the map function on nullVariable will produce the same error since null does not have a map method.

By intentionally using an undefined or null value and trying to call the map function on it. You can replicate the "cannot read property 'map' of undefined" error in JavaScript.

The following courses help you learn true basics and advanced Javascript concepts.

  1. JavaScript in Detail: From Beginner to Advanced.
  2. Learn Object-Oriented Programming in JavaScript.
  3. Decode the Coding Interview in JavaScript: Real-World Examples.
  4. Meta Front-end Developer Professional Certificate (Coursera course by Meta)
  5. JavaScript: The Advanced Concepts.
  6. JavaScript Web projects: 20 Projects to Build Your Portfolio.

How to fix this error?

There are quite a few ways to solve this error

  1. Check if the variable is defined.
  2. Assign a default value.
  3. Use the optional chaining operator.
  4. Use a conditional statement to handle the error to ensure data consistency.
  5. Use Array.from() to handle potential non-array values.
  6. Debug the code flow:

Before using the map function, ensure that the variable you are trying to map over is defined. You can use an if statement or the typeof operator to check if the variable exists. You can provide a default value or handle the error accordingly if it doesn't exist.

if (myArray && Array.isArray(myArray)) {
  myArray.map(item => {
    // Your code here
  });
} else {
  // Handle the case when myArray is undefined or not an array
}
const undefinedVariable = undefined;

try {
    // ❌ Fails this condition, as data is a undefined 
    const array = undefinedVariable.map(item => {
      // This code will not execute since the error occurs before reaching this point
    });
    
} catch (error) {
    // ✅ executes this line, as data has undefined value
    console.log('Something happened! 🤔', error);
}

// outputs
// Something happened! 🤔 TypeError: Cannot read properties of undefined (reading 'map')

Using optional chaining (🤔 Maybe)

The optional chaining operator (?.) can be used to access properties or call methods on potentially safely undefined or null values. By using the optional chaining operator before the map function, you can prevent the error and gracefully handle the case when the variable is undefined.

const myArray = undefined; // or null or an actual array

myArray?.map(item => {
  // Your code here
});

In this example, if myArray is undefined or null, the map function will not be called, and the error will be avoided.

If the variable might be undefined or null, you can assign it a default value to prevent the error. This can be achieved using the logical OR (||) operator to provide a fallback value if the variable is not defined.

const myArray = undefined; // or null or an actual array

const mappedArray = (myArray || []).map(item => {
  // Your code here
});

By using the (myArray || []) expression, an empty array is used as a fallback value if myArray is undefined or null.

Conditional statement for data consistency

If you expect a particular data structure, consistently initialise and update the variable as an array. This helps avoid scenarios where the variable is accidentally set to undefined or null.

let myArray = []; // Initialize as an empty array

// ... Code that may modify myArray ...

// Before using map, ensure myArray is still an array
if (Array.isArray(myArray)) {
  myArray.map(item => {
    // Your code here
  });
} else {
  // Handle the case when myArray is not an array
}

You reduce the chances of encountering the error by consistently initializing and updating the variable as an array.

Using Array.from()

If you suspect that the variable may not always be an array but could be an array-like object (e.g., NodeList or arguments), you can use Array.from() to convert it to an array before applying the map function.

const myVariable = undefined; // or null or an array-like object

const myArray = Array.from(myVariable || []);

myArray.map(item => {
  // Your code here
});

By using Array.from(), you ensure that myArray is an actual array, preventing the error when calling the map function.

Debug the code flow

If none of the above solutions resolves the issue, it may be necessary to debug the code flow to identify where the variable is becoming undefined.

Review the code leading up to the point where the error occurs and check for any unintended modifications or assignments that may cause the variable to lose its value.

By applying these different approaches, you can fix the "TypeError: Cannot read property 'map' of undefined" error in JavaScript based on the specific context and cause of the error.

How could this sort of situation happen?

This error occurs when you try to operate on a value variable. How can we stop this from happening?

There are a few other ways we, as a programmer, make a mistake and run into this error.

Querying APIs

When querying an API, we get the data and rarely do we run into an object property that possibly has an undefined or null value.

let data = {
    val: undefined,
    arr: {
      // ...
    }
};

data.val.map(item => {
  // Your code here
});

Why does the map() method only work for arrays?

The map() method happens to be a function on the array prototype. It only works on arrays and always creates a new array with the results of calling a provided function on every element in the calling array.

To learn more about what a map can do and how it can be done, here is the reference to the MDN doc - Array.prototype.map().

Why do you have to care about these errors?

One of many reasons to care about these errors is not to have any interruption when end users work on our software product.

Error handling should be the highest priority when building software to provide end users with an uninterrupted and seamless experience.

If you are working on a simple array or a massive object, you need proper error handling to ensure the application runs bug-free.

Things change and advance over time, technology included. Time doesn't spare software, and therefore bugs can appear.

Based on the end user's needs for our in-house software product or any application dependent on external APIs (let us say payment integrations, social sharing, or some other APIs etc.), error handling should be taken care of before consuming the data from them. This error handling helps gracefully handle hardware and software errors and helps execution resume when interrupted.

Important Note: No software is perfect, a zero bug development is a myth. Companies like Facebook, Netflix, Amazon, Dropbox, and other companies improve their software, they make improvements to meet the end users evolving expectations.

What is in-house product development?

Having everything developed in-house can reduce many bugs caused by external APIs due to dependencies.

In-house product development means everything is designed within the company and does not depend on any other external APIs that cause side effects. When we have everything built in-house, do you still need to care for the error handling? The answer is yes. No matter which objects we pull, we first need to check if it is not null or undefined.

Real-Life Example: Airbnb

Airbnb is dependent on Google APIs to provide the exact latitude and longitude. So what if Google introduces some new properties and renames some existing ones?

It impacts Airbnb directly as there is a change in property names and some new properties added. Due to this, every software product should have error handling. In JavaScript, the best way to handle these is with the help of an optional chaining operator ?..

Real-Life Example: Toggle feature

Most of the top tech giants use "feature toggling". Feature toggling means they can turn on/off a feature from the product with a single global variable defined in the properties. If you want to enable or disable a feature on the product, it can quickly be done using this global variable.

Imagine a use case where a company wants to add multi-factor authentication to all its users on the platform. Let's say the variable ƒtwoFactorEnabled is used for feature toggling. What if this variable is undefined? The product thinks that this feature is disabled and will make sure nothing breaks and the application renders properly, but the multi-factor authentication feature is turned off or disabled.

Useful Tip:You can go to chrome dev tools, go to sources tab and add javascript code snippets, you can execute them directly on the browser instead having node installed to run plain JS snippets other ways.

Conclusion

The "cannot read property 'map' of undefined" error occurs when trying to call map() method on a variable that stores an undefined value.

To solve this error, make sure you call map() method only on arrays. The best way to check whether a variable is an array or other types is using the optional chaining, try-catch and a few others discussed above.

  1. JavaScript: The Definitive Guide: Master the World's Most-Used Programming Language 7th Edition
  2. Eloquent JavaScript, 3rd Edition: A Modern Introduction to Programming 3rd Edition
  3. Learn JavaScript Quickly: A Complete Beginner’s Guide to Learning JavaScript, Even If You’re New to Programming (Crash Course With Hands-On Project)
  4. The Road to React: Your journey to master plain yet pragmatic React.js

🤑 Partner Discounts

  1. 20% off on Educative.io + 20% Holiday Season Promo
  2. ZeroToMastery 30% Flat Discount Code: PPP_30
  3. Get 50% Off From Skillshare
  4. Coursera Flat 70% off on selected courses
  5. Up to 20% discount on DataCamp (Limited Offer)
  6. Memrise: 28% discount on lifetime access (Join 65 million learners)
  7. Udacity: Up to 70% OFF on Udacity's nanodegree
  8. Flat 50% off on Linux Foundation boot camps, 30% on bundles, and certifications.

Next up?

Read the following articles:

How to Prevent cannot read property split of undefined
Introduction The “cannot read property split of undefined” error occurs when we try to call the split() method on a variable that stores an undefined value. In JavaScript, a variable is said to be undefined if it has been declared but not initialized. In simple words, when we do not
How can I remove a specific item from an array in JavaScript?
Removing a specific item from an array is the most use case a developer runs into. You will learn more than 7 ways to achieve this.
A Complete Guide To JavaScript LocalStorage
localStorage is a property of the window object in JavaScript that allows you to store key/value pairs in a web browser. The data stored in localStorage persist even after the browser is closed, making it a useful tool for saving user data on the client side.
JavaScriptReact.js

Gopi Gorantala Twitter

Gopi is an engineering leader with 12+ of experience in full-stack development—a specialist in Java technology stack. He worked for multiple startups, the European govt, and FAANG in India and Europe.

Comments


Related Posts

Members Public

How can I remove a specific item from an array in JavaScript?

Removing a specific item from an array is the most use case a developer runs into. You will learn more than 7 ways to achieve this.

How can I remove a specific item from an array in JavaScript?
Members Public

Two Sum Problem (Solutions in Java, JS, and TS)

In this two-sum problem, we use various approaches to solve the problem from brute force to an optimized approach. We also discuss the take-offs and talk about complexity analysis.

Members Public

A Complete Guide To JavaScript LocalStorage

localStorage is a property of the window object in JavaScript that allows you to store key/value pairs in a web browser. The data stored in localStorage persist even after the browser is closed, making it a useful tool for saving user data on the client side.

A Complete Guide To JavaScript LocalStorage