1

たくさんのオブジェクトがあり、これらのオブジェクト内に文字列「id」(オブジェクト名と同じ)がある場合、この文字列を使用してオブジェクトを参照するにはどうすればよいですか?

例:

//These objects are tests - note the id's are the same as the object name

var test1 = {
    id : "test1",
    data : "Test 1 test 1 test 1"
}

var test2 = {
    id : "test2",
    data : "Test 2 test 2 test 2"
}


/* ----- My Function   ----- */

var myObj = null;

function setMyObj(obj){
   myObj = obj;
}

setMyObj(test1);

/* ----- My Function   ----- */

さて、私が次のように呼ぶと:

myObj.id;

結果は「test1」(文字列)です。これを使用してtest1からデータを取得する場合、どのようにすればよいですか?

"myObj.id".data
[myObj.id].data

^^^

これらは機能しません!

乾杯、金持ち

4

4 に答える 4

4

変数がグローバルスコープで定義されている場合、次のように機能します

window[ myObj.id ].data

関数のスコープ内にいると、事態はさらに難しくなります。最も簡単な方法は、ウィンドウ上の特定の名前空間でオブジェクトを定義し、上記のコードと同様のオブジェクトを取得することです。

于 2012-06-19T14:02:30.707 に答える
2

test1とtest2をKey-Valueコレクション(別名オブジェクト)に格納します。次に、次のようにアクセスします。

collection[myObj.id].data
于 2012-06-19T14:02:59.760 に答える
2

変数を使用して何かを参照する場合は、その何かを変数ではなくオブジェクトプロパティにします。それらがそのようにアクセスされるのに十分に関連している場合、それらはその関係を表現するための適切なデータ構造を持つのに十分に関連しています。

var data = {
    test1: {
        id: "test1",
        data: "Test 1 test 1 test 1"
    },
    test2: {
        id: "test2",
        data: "Test 2 test 2 test 2"
    }
};

次に、以下にアクセスできます。

alert( data[myObj.id] );
于 2012-06-19T14:04:15.840 に答える
0

素晴らしい答えです。助けてくれてありがとう。将来誰かがこれを見つけた場合に備えて、これが私がそれを使用する方法です。

var parent = {}

parent.test1 = {
    id : "test1",
    data : "Test 1 test 1 test 1"
}

parent.test2 = {
    id : "test2",
    data : "Test 2 test 2 test 2"
}


var myObj = null;

function setMyObj(obj){
   myObj = obj;
}


setMyObj(parent.test1);

parent[myObj.id] = null;
//Test1 object is now null, not myObj!
于 2012-06-19T14:17:25.993 に答える