2013-08-28 9 views
11

pushメソッドを使用してキーと値のペアの配列を作成しようとしましたが、予期しない結果が得られました。キー/値ペアのJavaScript配列は、キーのリテラル変数名を使用します

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 = authorbooks[bookTitle] = authorを試してみたが、結果は同じです。どんな助けもありがとうございます。

+0

'books'は配列であり、一冊(' books [0] ')で呼び出すと括弧表記が機能することに注意してください。 – Bergi

答えて

22

Bracket notationはダイナミックキー名を使用する正しい方法です:

books[bookTitle] = author 

はしかし、あなたは、中間オブジェクトを使用する必要があります。現代のJavascript(ES2015 +)で

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

まったく - http://jsfiddle.net/rDSQH/ –

+0

!私はそれを試みたはずです。ありがとう! – Raj

+0

jscriptがこのように設計された理由は正当でしょうか?私はそのデザインが悪化しているのを見つけました。 –

3

を、あなたが使用することができますcomputed propertiesあなたのサンプルコードを若干修正します - 角括弧はキー名の周りにラップされて計算されることを意味しますの前にの割り当て:

正しく得
var books = []; 
var bookTitle = "Tom Sawyer"; 
var author = "Mark Twain"; 

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

...:

を[{ 'トム・ソーヤー': 'マークトウェイン'}

これは、マット・ボールのオリジナルの答えに似ていますが、冗長性を回避一時変数を使用します。

関連する問題