2

オブジェクトのプロパティをインクリメント(ループではなく)することは可能ですか?オブジェクトは順序を保証しないことは知っていますが、何らかの方法でオブジェクトをインクリメントしたいと思います。

たとえば、アレイの場合、次のことができます。

arr[index++];

ただし、これはオブジェクトでは機能しません。

obj[key++];

++演算子はキーで使用するように定義されているとは思わないので。

キー付きのインデックスを格納する複雑なオブジェクト構造を構築する必要はありません。ネイティブにやりたいです。

私はfor-in構造をよく知っていますが、ループではなく、必要に応じてインクリメントしたいと思います。

4

2 に答える 2

3

最近のブラウザでは、keys配列を使用できます。

val = Object.keys(o)[i++];

詳細な例:

var keys = Object.keys(o);
for (var i=0; i<keys.length; i++) {
    var key = keys[i];
    console.log(key, o[key]);   
}

IE8と互換性を持たせるには、次の構成を使用してキーを反復処理します。

for (var key in o) {
   console.log(key, o[key]);
}

継承されたプロパティを繰り返し処理したくない場合は、hasOwnPropertyを使用してください。

for (var key in o) {
    if (o.hasOwnProperty(key) console.log(key, o[key]);
}
于 2012-12-29T18:52:11.413 に答える
1

++演算子は任意の数値に作用します:数値を 1 増やします。

オブジェクトのプロパティが数値である場合、++それらを反復処理するために使用できます。

var obj = { 1: "foo", 2: "bar", 3: "baz" };
var i = 1;
console.log( obj[i++] );
console.log( obj[i++] );
console.log( obj[i++] );

(もちろん、これに関する 1 つの問題は、一般に、たとえ数値であっても、オブジェクトのプロパティが連続した数値でなければならないという保証がないことです。)

さて、dystroy はすでに実際の質問にかなりよく答えているので、ここでは彼の答えを繰り返さない. ++このビットを追加して、「演算子はキーで使用するために定義されているかどうか」を尋ねることには要点がないという事実を強調したかっただけです。++演算子は、操作対象の値が配列キーであるか、オブジェクトのプロパティ名または生命、宇宙、およびすべての答え。気にするのは、それが数値であるかどうか、または数値として意味のある解釈ができるかどうかだけです。

于 2012-12-29T19:11:22.687 に答える