2016-05-31 7 views
0

変数をオブジェクト参照名として割り当てるときに問題が発生します。変数をオブジェクト参照として使用する

var roomName = 'room_' + $(this).data("room-id"); 

    console.log("roomName: " + roomName); 

    beds_required_obj.roomName.single_beds_required = parseInt($(this).val()); 

私はconsole.logレポートこの:"roomName: room_1"

を期待しかし、私はエラーを得続けるよう: "TypeError: beds_required_obj.roomName is undefined"

配列としてそれを割り当てるときに、私は変数を使用することができます。

single_beds_required['room ' + $(this).data("room-id")] = parseInt($(this).val()); 

しかし、この場合、私のオブジェクトは乱雑で、整形式のサーバー側に取り込むために余分な処理が必要になります。

グローバルオブジェクト内に新しいobjサブグループを作成するには(関数内の)変数を使用するにはどうすればよいですか?

+1

あなたはほとんどそれを持っています。 'beds_required_obj [roomName] .single_beds_required = ... 'を使用してください。 –

+0

@Matt Wey ....はい私はそれを試みました。 TypeError:beds_required_obj [roomName]が定義されていません – Nick

+0

まずオブジェクトを 'beds_required_obj = {};'で初期化します。 – Adder

答えて

1
var beds_required_obj = {}; 

var roomName = 'room_' + $(this).data("room-id"); 

console.log("roomName: " + roomName); 

if(!beds_required_obj[roomName]) beds_required_obj[roomName] = {}; 
beds_required_obj[roomName].single_beds_required = parseInt($(this).val()); 
1

一般に、コンソールで受信したエラーはありません。だからあなたのオブジェクトを壊して、エラーを引き起こす可能性のあるものを見てみましょう。

var roomName = 'room_' + $(this).data('room-id'); 
beds_required_obj.roomName.single_beds_required = ... 

上記コードでは、最初にbeds_required_objが存在するオブジェクトであると仮定しています。私たちは、あなたが使用されるように、これは確かに真実であることをコメントで確認できます。

var beds_required_obj = {}; 

今、このオブジェクトが存在するため、あなたがbeds_required_obj.anything_hereを呼び出すことができ、それが有効なコードになります。しかし、あなたがアクセスしようとしている子供は存在しないかもしれません。

次に、beds_required_obj.roomNameと書いてあります。これで、 'room_ID'ではなく、 'roomName'という名前の子オブジェクトにアクセスしようとしています。 roomName変数に格納されている動的名にアクセスするには、角括弧を使用する必要があります。したがって:

beds_required_obj[roomName] 

これは、動的に作成されたルーム名の子オブジェクトを返します。

実際にはroomName(実際には 'room_123'など)に応じて、この子オブジェクトも存在しない可能性があります。存在しない場合、このオブジェクトの子にアクセスしようとすると、エラーが返されます。例えば、以下のコードを見て:何が起こっている

var beds_required_obj = []; // create an empty object 
var roomName = 'room_1234'; // the name of our room 

// this line below will throw an error because the room_1234 child object does not exist 
beds_required_obj[roomName].single_beds_required = 2; 

すると、未定義のオブジェクトの子としてsingle_beds_requiredにアクセスしようとしているということです。

var beds_required_obj = []; // create an empty object 
var roomName = 'room_1234'; // the name of our room 

// now create the room child object 
beds_required_obj[roomName] = {}; 
// now this line will work, as the room is a valid object that can have children assigned to it. 
beds_required_obj[roomName].single_beds_required = 2; 

注:この作業を行うには、余分な行が含まれるように上記のコードを変更する必要があります(IMO)より読みやすいコードでこのような何かをしたい場合は、私が使用します。

breds_required_obj[roomName] = { 
    single_beds_required: 2 
}; 
関連する問題