Unable to access key value pairs in js object

Issue

Unable to access key value pairs in js object. I’m trying to access current day from dayName but I’m unable to do so. It is showing undefined when I’m trying to access the dayName via dayNum key.

JS

app.get("/", (req, res) => {       
    let dayName = {
        "1" : "Monday",
        "2" : "Tuesday",
        "3" : "Wednesday",
        "4" : "Thursday",
        "5" : "Friday",
        "6" : "Saturday",
        "0" : "Sunday"
    }
    
    let today = new Date();
        
    let dayNum = today.getDay().toString();
    console.log(dayName.dayNum);

    res.render("list", {
        day : dayName.dayNum
    });
});

EJS

<!DOCTYPE html>
<html lang="en">
    
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>To Do List</title>
</head>
    
<body>
    <h1>Today is <%= day %></h1>
</body>
    
</html>

OUTPUT:

console output

browser output

Solution

You should use the square bracket notation. With the dot notation dayName.dayNum we are looking for the value with key "dayNum" inside the object and since it does not have any such key, it returns undefined. If we use the bracket notation, dayNum will be evaluated to the correct key before object access. See Dot Notation vs. Bracket Notation

res.render("list", {
    day : dayName[dayNum]
});

Also I would recommend using an array instead of object for dayName

const dayName = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

Answered By – Abito Prakash

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published