web-dev-qa-db-ja.com

JavaScriptで変数値からオブジェクトプロパティを作成する方法

'myObj'に新しいプロパティを追加して 'string1'という名前を付け、 'string2'の値を指定したいのですが、実行すると 'undefined:が返されます。

var myObj = new Object;
var a = 'string1';
var b = 'string2';
myObj.a = b;

alert(myObj.string1); //Returns 'undefined'
alert(myObj.a); //Returns 'string2'

言い換えれば、オブジェクトプロパティを作成し、それに変数に格納されている名前を付けるが、変数自体の名前は付けないのですか?

305
ecu

ドット表記とブラケット表記 があります

myObj[a] = b;
404
philfreo

ES6では、計算プロパティ名が導入されています。

var myObj = {[a]: b};

注意ブラウザのサポートは現在ごくわずかです。

286
Oriol

ドット表記とプロパティは同等です。それで、あなたはそのように達成するでしょう:

var myObj = new Object;
var a = 'string1';
myObj[a] = 'whatever';
alert(myObj.string1)

(「何でも」という警告)

71
cgp

Ecu、myObj.aを実行すると、myObjのaという名前のプロパティを探します。 myObj[a] =bを実行すると、myObjのa.valueOf()プロパティを探します。

9
user286806

オネリナー:

obj = (function(attr, val){ var a = {}; a[attr]=val; return a; })('hash', 5);

または

attr = 'hash';
val = 5;
var obj = (obj={}, obj[attr]=val, obj);

もっと短いものはありますか?

7
user2846569

あなたはこれを使うことができます:

function createObject(propName, propValue){
    this[propName] = propValue;
}
var myObj1 = new createObject('string1','string2');

最初のパラメータとして渡すものはすべてプロパティ名になり、2番目のパラメータはプロパティ値になります。

4
Aaron George

$ scopeはオブジェクトなので、JavaScriptを使って試すことができます。

$scope['something'] = 'hey'

それはに等しいです:

$scope.something = 'hey'

テスト用のフィドルを作成しました

3
Tuan

ドット表記でプロパティにアクセスするために変数を使用することはできません。代わりに配列表記を使用してください。

var obj= {
     'name' : 'jroi'
};
var a = 'name';
alert(obj.a); //will not work
alert(obj[a]); //should work and alert jroi'
2
jroi_web

以下は、(a, b)の形式を使用してキーペアオブジェクトを返すための代替アプローチを示しています。最初の例では、プロパティ名として'key'、値として'val'を使用しています。

例1:

(function(o,a,b){return o[a]=b,o})({},'key','val');

例:#2:

var obj = { foo: 'bar' };
(function(o,a,b){return o[a]=b,o})(obj,'key','val');

2番目の例に示すように、これは既存のオブジェクトも変更することができます(プロパティがすでにオブジェクトで定義されている場合、値は上書きされます)

結果#1:{ key: 'val' }

結果#2:{ foo: 'bar', key: 'val' }

0
Trent