2011-12-30 11 views
1

一部のオブジェクトプロパティ/配列操作。パート2とパート3を達成するための構文が改善されていますか?javascriptオブジェクトのプロパティ/配列操作

// 1. create object and add element/arrays 
var myObject = {}; 
myObject["123"] = { "A": 123, "B": 456 }; // add 
myObject["123"] = { "C": 123, "D": 456 }; // add more elements to array in element! 
myObject["124"] = { "A": 123, "B": 456 }; 
myObject["125"] = { "A": 123, "B": 456 }; 
console.log(myObject); 

// 2. delete first property in array 
for (property in myObject){ 
     delete myObject[property]; 
     break; 
    } 

// 3. show first remaining property 
for (property in myObject){ 
     x = property; 
     console.log("first remaining property is " + x); 
     break; 
    } 
+1

JavaScriptでのプロパティの割り当ては追加ではありません。 2番目の行に、さらに要素を追加しないキー '' 123 '' '' {'" A ":123、" B ":456} 123、 "D":456}; 'それに。 – Anurag

+0

プロパティの順序が反復されることは保証されていません。したがって、最初のプロパティを削除するコードに頼るべきではありませんhttp://stackoverflow.com/questions/5773950/how-to-keep-an-javascript-object-array-ordered-while-also-maintaining-key -lookup –

+0

実際に、私は最初の財産を本当に必要としません...一度に1つの財産を噛むだけで十分です。そして、私が要素を置き換えていることを警告してくれてありがとう! –

答えて

2

私はあなたがいる理由はよく分かりませんオブジェクトリテラル構文(JSONはオブジェクトリテラル宣言に似ています)で途中までしか進まないのですが、それもバグです。 2番目の割り当てでmyObject ["123"]を上書きしています。あなたがはるかに単純にそのセクション全体1書くことができ

var myObject = { 
    "123": { 
     "A": 123, 
     "B": 456, 
     "C": 123, 
     "D": 456 
    }, 
    "124": { 
     "A": 123, 
     "B": 456 
    }, 
    "125": { 
     "A": 123, 
     "B": 456 
    } 
} 

第2および第3の、のようなものはありません「配列の最初のプロパティが。」これはjavascript(新しい人だけでなく、何年もそれを書いてきた人)を書いている人にとっては、よくある間違いです。そう、これまでどのようなオブジェクト史上「最初の」または「第二」のいずれかの一部であるか、またはオブジェクト内の任意の順序を持​​っていない状況下では

。これは、ECMA-262仕様で明確に概説されています。ブラウザーのベンダーはこの動作に対応していることがあります。

これは、オブジェクトが配列ではなく、それも存在しないためです。物事を配列の順にするには、配列を使用する必要があります。ドキュメントオブジェクトの「最初の」要素は何ですか?明らかにそれは愚かな質問ですが、その点を証明しています。オブジェクトは順序を維持しません。それは配列が行うことです。

そのために配列を使用してください。角括弧は文字列をキーとしない配列を表します(オブジェクトのようなものです)。物事をもっと混乱させるために、配列はオブジェクトなので、オブジェクトのように動作できます。オブジェクトを混乱させたり、オブジェクトが配列であると思ったりしないでください。

+0

ほんの少し不安ですが、本当は "JSON"ではありません。オブジェクトリテラルです。 –

+0

JSONは単純にJSオブジェクトリテラルのサブセットですが、基本的には関数がなく、プロパティ名を引用する必要があります。だから私の本では、上記はJSONの資格を得ています。 @ JamesMontagne:あなたはそれがJSONの文字列だと思っていますか? –

+0

@juanはい。これはデータ交換形式です。この場合、それは単なるオブジェクトリテラルです。私だけかもしれません。 「JSONは完全に言語に依存しないテキスト形式です」という私の(多分)厳密な解釈です。 –

0

あなたはそれをサポートするブラウザでObject.keys()を使用することができます。

console.log("first remaining property is " + Object.keys(myObject)[0]); 

順序はどちらの方法で保証されている場合、私はわからないんだけど。

+0

OPが何を求めているのか、この答えが何をしようとしているのか分かりません:p –

+0

私はそれを理解しているので、オブジェクトの「最初の」特性を得る良い方法があるかどうかを知りたいと思っています。 –

+0

注文は決してオブジェクトで保証されません。 orderは配列の特徴です。 – Incognito

1
myObject["123"] = { "C": 123, "D": 456 }; 

オブジェクト(連想配列)に複数の要素を追加しない、それはそれらを置き換えます。要素を追加するために次のように記述する必要があるだろう:

myObject["123"].C =123; 
myObject["123"].D = 456; 

#2、#3については、Javascriptのオブジェクトは、それらが追加された順序でプロパティを返すように保証するものではありません。このために、あなたは、アレイに頼らなければならないだろうし、別のデータ構造の狭窄にデータを調整した後、あなたはとの最初の要素を取得することができます:

myArray.shift()