19

我正在尝试使用该push方法创建一个键/值对数组,但得到了意想不到的结果。

console.log打印这个:

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

而我希望这样:

书籍:[{“汤姆索亚”:“马克吐温”}]

这是代码:

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

books.push({bookTitle : author})

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

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

4

2 回答 2

32

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

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))
于 2013-08-28T15:14:35.650 回答
13

在现代 Javascript (ES2015+) 中,您可以使用计算属性以一种轻微的方式修改您的示例代码 - 方括号括在键名周围,表示它应该在分配之前计算:

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

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

...正确产生:

[ {'汤姆索亚':'马克吐温'}

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

于 2017-10-16T22:55:53.200 回答