JavaScriptオブジェクトの値を動的に設定する方法は?


98

ケースを言葉で説明するのは難しいので、例を挙げましょう。

var myObj = {
    'name': 'Umut',
    'age' : 34
};

var prop = 'name';
var value = 'Onur';

myObj[name] = value; // This does not work

eval('myObj.' + name) = value;   //Bad coding ;)

JavaScriptオブジェクトの変数値で変数プロパティを設定するにはどうすればよいですか?



2
よく見てください。courコードを調整するのを忘れたようです。それはあるはずですmyObj[prop] = value;eval('myObj.'+name)変数nameが存在しないため、どちらも機能しません。
Felix Kling

7
var変数の宣言にはもっと多くのキーボードを使用し、より多くのセミコロンを使用しeval、使用せず、より多くの答えを受け入れる必要があります。できました。
jAndy

あなたの質問には欠陥があります-それうまくいきますが、あなたは間違いを犯しました。「myObj[name]」を書くつもりだったと確信しているときに「myObj[prop]」を書いた。
アーネストフリードマンヒル

回答:


150
myObj[prop] = value;

うまくいくはずです。変数の名前とその値を混同しています。しかし、そのプロパティを取得するために文字列を使用してオブジェクトにインデックスを付けることは、JavaScriptでは正常に機能します。


47
myObj.name=value

または

myObj['name']=value     (Quotes are required)

これらはどちらも交換可能です。

編集:myObj[prop] = value myObj [name] = valueではなく、を意味していると思います。2番目の構文は正常に動作します:http : //jsfiddle.net/waitinforatrain/dNjvb/1/


1
オブジェクトプロパティが予約語の場合、2番目の構文が必要です。
timw4mail

これは正しいですが、実際には彼の質問には答えません。彼は、プロパティ名が変数にあるときに何をすべきか疑問に思っています。
アーネストフリードマンヒル

そこに更新された答え、あなたはnameあなたが持っているべき場所がありますprop
bcoughlan

5

設定と同じ方法でプロパティを取得できます。

foo = {
 bar: "value"
}

値を設定します foo["bar"] = "baz";

値を取得するには foo["bar"]

「baz」を返します。


5

値オブジェクト(vo)に似たものを作成することもできます。

SomeModelClassNameVO.js;

function SomeModelClassNameVO(name,id) {
    this.name = name;
    this.id = id;
}

あなたがすることができるよりも;

   var someModelClassNameVO = new someModelClassNameVO('name',1);
   console.log(someModelClassNameVO.name);

3

myObjあなたが持っているようにオブジェクトを作成するとき、それを辞書のように考えてください。この場合は、との2つのキーnameがありageます。

これらの辞書には、次の2つの方法でアクセスできます。

  • 配列のように(例えばmyObj[name]); または
  • プロパティのように(例myObj.name)一部のプロパティは予約されているため、最初の方法をお勧めします。

プロパティとして問題なくアクセスできるはずです。ただし、配列としてアクセスするには、キーを文字列のように扱う必要があります。

myObj["name"]

それ以外の場合、JavaScriptはそれをname変数であると想定します。という変数を作成していないため、name期待するキーにアクセスできません。


1
前者は変数名を参照し、2番目はリテラルキーを参照するため、との間にはまだ違いがmyObj[name]ありmyObj.nameます。
pimvdb

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.