JavaScript数组键/值对使用键的文字变量名称

Raj*_*Raj 16 javascript

我正在尝试使用该push方法创建一个键/值对数组,但获得意外结果.

console.log 打印这个:

书籍:[{"bookTitle":"马克吐温"}]

虽然我希望如此:

书籍:[{"Tom Sawyer":"马克吐温"}]

这是代码:

var books = [];
var bookTitle = "Tom Sawyer";
var author = "Mark Twain";

books.push({bookTitle : author})

console.log("books: %s", JSON.stringify(books))
Run Code Online (Sandbox Code Playgroud)

我试过books.bookTitle = authorbooks[bookTitle] = author,但结果是一样的.任何帮助表示赞赏.

Mat*_*all 30

括号表示法是使用动态密钥名称的正确方法:

books[bookTitle] = author
Run Code Online (Sandbox Code Playgroud)

但是,您需要使用中间对象:

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))
Run Code Online (Sandbox Code Playgroud)


Lee*_*son 11

在现代的Javascript(ES2015 +),则可以使用计算性能它修改你的示例代码中的一个微小的方式-方括号围绕键名包,以表示它应计算之前分配:

var books = [];
var bookTitle = "Tom Sawyer";
var author = "Mark Twain";

books.push({[bookTitle] : author})
Run Code Online (Sandbox Code Playgroud)

......正确地产生:

[{'Tom Sawyer':'马克吐温'}

这类似于Matt Ball的原始答案,但避免了使用临时变量的冗长.