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

时间:2013-08-28 15:13:19

标签: javascript

我正在尝试使用push方法创建一组键/值对,但会产生意外结果。

console.log打印出来:

  

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

我希望如此:

  

书:[{“Tom Sawyer”:“Mark Twain”}]

以下是代码:

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

books.push({bookTitle : author})

console.log("books: %s", JSON.stringify(books))

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

2 个答案:

答案 0 :(得分:30)

Bracket notation是使用动态密钥名称的正确方法:

books[bookTitle] = author

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

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))

答案 1 :(得分:11)

在现代Javascript(ES2015 +)中,您可以使用computed properties以一种轻微的方式修改您的示例代码 - 方括号围绕键名称,表示它应该在之前计算 >任务:

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

books.push({[bookTitle] : author})

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

  

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

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