1

たとえば、次のJavascriptオブジェクトがあるとします。

var Object = {
   Person_A: { name: 'James', age: 40, country: 'Spain' }, 
   Person_B : { name: 'Smith', age: 50, country: 'France' } 
}

オブジェクトにプロパティがいくつあるかを知りたいので、Objectこれらのプロパティに数値でアクセスしますObject[n]

これまで(私はJavascriptオブジェクトをあまり使用していませんが、AJAXを使用する場合はリターン形式としてJSONを使用します)Javascriptオブジェクトにlengthメソッドがなく、数値でアクセスできないことを知りませんでした。

私はJavascriptオブジェクトをAJAX呼び出しを行ったときに返されるのと同じタイプのJSONに変換しようとしました(JSONはlengthメソッドを持つオブジェクトとして返され、数値的にアクセス可能です-別のスレッドを読むだけで、多分私は'これについては間違っています-今すぐダブルチェック)を使用してJSON.parse(JSON.stringify(Object))いますが、それは単に同じ正確なオブジェクトを返します。

だから、私の質問は、例のようなオブジェクトを取得し、それを数値的にアクセス可能にしてメソッドを持つための最も効率的な方法は何ですかlength

どんな助けでも大歓迎です(そしてあなたが私の質問の説明が必要かどうか尋ねてください)。

ありがとう。

4

3 に答える 3

5

これは意味のあることではできません。JavaScriptオブジェクトのプロパティには、固有の順序1はありません。

lengthプロパティは、配列の特別なメンバーです(配列は、特定の[[prototype]]を持ち、魔法のように更新する方法を理解しているオブジェクトであり、length他のいくつかの内部ルールが定義されています。それだけです!)


コメントの更新:

インデックスが必要な場合は、配列を使用します。

var people = [
   { id: "Person_A", data: { name: 'James', age: 40, country: 'Spain' } },
   { id: "Person_B", data: { name: 'Smith', age: 50, country: 'France' } }
]

people[0].id // "Person_A"

1 JSONはテキストとしてシリアル化された場合にのみ 「順序があります」が、JavaScriptオブジェクトに変換するものを含む実装は、順序に関するアクセス[または仮定]なしで機能します。JSON標準によるプロパティの順序保証はありません。JSON(またはJS Object Literal)で順序付けられたオブジェクトの「外観」のプロパティが順序を意味するわけではありません。

于 2012-05-28T01:18:07.597 に答える
2

そのオブジェクトを数値でアクセス可能な配列に完全に置き換えたい場合は、最初にオブジェクトをループして新しい配列を作成できます。

var newArray=new array();
for(i in object){
    array.push(i);
}

これで、その配列に数値でアクセスできます

于 2012-05-28T01:19:26.327 に答える
1
function numericIndices(obj) {
    var i=0, x;
    for( x in obj) {
        obj[i] = obj[x];
        i++;
    }
    // next line is OPTIONAL:
    obj.length = i;
}

オブジェクトが与えられると、これはそのオブジェクトに数値インデックスを追加します。したがって、その関数を実行した後、オブジェクトには文字列キーと数値キーの両方が含まれます。オプションの行もある場合は、lengthプロパティも自動的に取得されます。

于 2012-05-28T01:19:11.053 に答える