84

次のキー名を取得するにはどうすればよいですか? たとえば、「button1」と「button2」が必要ですか?

var buttons = {
    button1: {
        text: 'Close',
        onclick: function(){

        }
    },
    button2: {
        text: 'Close2',
        onclick: function(){

        }
    }
}

var i;
for(i in buttons){
    if(buttons.hasOwnProperty(i)){
        alert(buttons[i].text);
    }
} 

.push()これはうまくいきませんでしたが、使用してみました。

4

8 に答える 8

101

言葉遣いを少し変更すると、これはよりよく理解できるかもしれません。

var buttons = {
  foo: 'bar',
  fiz: 'buz'
};

for ( var property in buttons ) {
  console.log( property ); // Outputs: foo, fiz or fiz, foo
}

ここで、オブジェクトのプロパティを繰り返し処理していることに注意してくださいproperty。その後の各サイクルでそれぞれを参照として使用します。

MSDNfor ( variable in [object | array ] )次のように述べています。

ループの各反復の前に、変数にはオブジェクトの次のプロパティ名または配列の次の要素インデックスが割り当てられます。その後、ループ内の任意のステートメントで使用して、オブジェクトのプロパティまたは配列の要素を参照できます。

また、オブジェクトのプロパティの順序は一定ではなく、配列のインデックスの順序とは異なり、変更される可能性があることに注意してください。それは重宝するかもしれません。

于 2012-04-26T13:24:02.877 に答える
68

ECMAscript エディション 5 では、きちんとしたメソッドObject.keys()Object.getOwnPropertyNames().

そう

Object.keys( buttons );  // ['button1', 'button2'];
于 2012-04-26T13:26:06.860 に答える
10

alert(buttons[i].text);に変更alert(i);

于 2012-04-26T13:21:09.993 に答える
6

変数iは、見た目のキー名です。

于 2012-04-26T13:22:35.407 に答える
3

Prototype にアクセスできると仮定すると、これでうまくいく可能性があります。このコードは、ほんの数分前に自分用に書きました。一度に必要なキーは 1 つだけだったので、キーと値のペアの大きなリストや複数のキー名を吐き出す場合、これは時間効率がよくありません。

function key(int) {
    var j = -1;
    for(var i in this) {
        j++;
        if(j==int) {
            return i;
        } else {
            continue;
        }
    }
}
Object.prototype.key = key;

これは、配列と同じように機能するように番号が付けられているため、頭痛の種を避けることができます。あなたのコードの場合:

buttons.key(0) // Should result in "button1"
于 2013-07-10T17:54:47.420 に答える