1

このような配列を作成したい

[
    {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
    {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
]

私はこのような配列を定義しました

var  myarray = []

そして今、私は上記の例のようにこの構造を作成したいと思います

内部に配列があることに気付いた場合object socketIds: [4, 5, 6] 、多くのオブジェクトを含む配列を作成するにはどうすればよいですか?また、それらをどのように呼び出す必要がありますか?

上記の例では、このmyarrayに名前を付ける場合、socketIds 1またはtimme!

4

5 に答える 5

3

2 つの質問があります。

多くのオブジェクトを含む配列を作成するにはどうすればよいですか?

var myarray = [];
myarray[0] = {};//make an empty object
myarray[0].sessionId = '12345';//in JS assigning something to a property of an object creates/updates it
myarray[0].nickname = 'timmay!';
myarray[0].socketIds = [];//create an empty array
myarray[0].socketIds[0] = 1;//assign the first element of array called socketIds in the first object of the array called myarray
myarray[0].socketIds[1] = 2;
myarray[0].socketIds[2] = 3;

myarray[1] = {};
myarray[1].sessionId = '12345';
myarray[1].nickname = 'timmay!';
myarray[1].socketIds = [ 4, 5, 6];

たとえば、上記の例で、これに myarray という名前を付ける場合、socketIds 1 または timme をどのように呼び出す必要がありますか!?

alert( myarray[0].socketIds[0] );
alert( myarray[0].nickname );

編集1:

通常は for() ループを使用して配列を処理しますが、Javascript エンジンのパフォーマンスを最大限に引き出したい場合は、配列参照を毎回参照するのではなく、保存することを検討してください。このような:

var myarray = [];
var tmpObj = myarray[0] = {};//make an empty object
tmpObj.sessionId = '12345';//in JS assigning something to a property of an object creates/updates it
tmpObj.nickname = 'timmay!';
var tmpArr = tmpObj.socketIds = [];//create an empty array
tmpArr[0] = 1;//assign the first element of array called socketIds in the first object of the array called myarray
tmpArr[1] = 2;
tmpArr[2] = 3;

しかし、最新の Javascript エンジンはこれらの繰り返し参照を処理し、最終的なコードは参照を保存しない場合と同じくらい高速になると確信しています。

編集2:

もちろん、あなたが自分の質問に書いたことは、配列を初期化するための有効な構文でもあります(オブジェクトと配列リテラル):

var myarray = [
    {
        sessionId: '12345', 
        nickname: 'timmay!', 
        socketIds: [1, 2, 3]
    },
    {
        sessionId: '23456',
        nickname: 'pete',
        socketIds: [4, 5, 6]
    }
];

この構文の問題は、値をハードコーディングする必要があり、Javascript で複雑なデータ構造を作成する最も一般的な方法ではないことです。とにかく、この回答の冒頭で述べた最初のソリューションと同じオブジェクトが作成されます。したがって、次のようなパーツに引き続きアクセスできます。

alert( myarray[0].socketIds[0] );
于 2013-01-28T14:20:25.537 に答える
2

これはあなたが呼び出す必要がある方法です

    var arr = [
        {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
        {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
    ];

    document.write(arr[0].nickname+"<br>");
    document.write(arr[0].socketIds[0]);
于 2013-01-28T14:24:09.923 に答える
1

あなたの質問が本当にこれほど単純かどうかはわかりませんが、あなたが示したコードは、リテラル表記を使用して、オブジェクトの配列をすでに作成しています。したがって、それを変数に割り当てるだけです。

var myarray = [
    {sessionId: '12345', nickname: 'timmay!', socketIds: [1, 2, 3]},
    {sessionId: '23456', nickname: 'pete', socketIds: [4, 5, 6]}
];

あなたが言及した要素にアクセスするには:

console.log(myarray[0].socketIds[0]); // 1
console.log(myarray[0].nickname);     // "timmay!"

後で別のオブジェクトを追加する場合:

var newObject = {sessionId: '34567', nickname: 'john', socketIds: [7, 8, 9]};
myarray.push(newObject);
于 2013-01-28T14:22:23.373 に答える
1

このデータ構造は Python の辞書型に似ています。この辞書と同等のデータ構造を試してみませんか?

于 2013-01-28T14:20:09.713 に答える
1

次のように変数を初期化します。

var myArray = [{}, {}],
    socket1 = myArray[0],
    socket2 = myArray[1];

次に、socket1 と socket2 にそれぞれ割り当てを行います。これはあなたの質問に完全には答えないかもしれませんが、有限で少数のソケットがある場合に、これらの種類の割り当てを行うための受け入れられた方法を示しています。

于 2013-01-28T14:27:11.867 に答える