Javascript Array Of Key/value Pairs Uses Literal Variable Name For Key
I'm trying to create an array of key/value pairs by using the push method, but getting unexpected results. console.log prints this: books: [{'bookTitle':'Mark Twain'}] Whereas I
Solution 1:
Bracket notation is the correct way to use a dynamic key name:
books[bookTitle] = author
However, you need to use an intermediate object:
var books = [];
var bookTitle = "Tom Sawyer";
var author = "Mark Twain";
var foo = {};
foo[bookTitle] = author;
books.push(foo);
console.log("books: %s", JSON.stringify(books))
Solution 2:
In modern Javascript (ES2015+), you can use computed properties which modifies your example code in one slight way-- square brackets are wrapped around the key name to signify it should be computed before assignment:
var books = [];
var bookTitle = "Tom Sawyer";
var author = "Mark Twain";
books.push({[bookTitle] : author})
... which correctly yields:
[ { 'Tom Sawyer': 'Mark Twain' }
This is similar to Matt Ball's original answer, but avoids the verbosity of using temporary variables.
Post a Comment for "Javascript Array Of Key/value Pairs Uses Literal Variable Name For Key"