我正在尝试使用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 = author
和books[bookTitle] = author
,但结果是一样的。任何帮助表示赞赏。
答案 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的原始答案类似,但避免使用临时变量的冗长。