以下のようなJavaScriptのオブジェクトがあります。
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
ここで、すべての p
要素 (p1
, p2
, p3
...) をループして、そのキーと値を取得したいと思います。どのようにすればよいでしょうか?
必要であれば、JavaScriptのオブジェクトを変更することもできます。私の最終的な目標は、いくつかのキーと値のペアをループすることで、できれば eval
の使用を避けたいと思っています。
他の人が示しているように、for-in
ループを使うことができます。ただし、取得したキーがオブジェクトの実際のプロパティであり、プロトタイプから来たものではないことを確認する必要があります。
**スニペットを見てみましょう。
var p = {
"p1": "value1",
"p2": "value2",
"p3": "value3"
};
for (var key in p) {
if (p.hasOwnProperty(key)) {
console.log(key + " -> " + p[key]);
}
}
<! -- スニペットの終了 -->
Object.keys()に代わるものとしてFor-ofがあります。
<! -- begin snippet: js hide: false console: true babel: false -->
var p = {
0: "value1",
"b": "value2",
key: "value3"
};
for (var key of Object.keys(p)) {
console.log(key + " -> " + p[key])
}
<! -- スニペットの終了 -->
for-inではなく、[
for-of`]1を使用していることに注目してください。使用しなければ、名前付きのプロパティに対して未定義を返します。また、Object.keys()により、プロトタイプチェーンのプロパティ全体ではなく、オブジェクト自身のプロパティのみを使用することができます。
for(key in p) {
alert( p[key] );
}
注意:これは配列に対して行うことができますが、長さ
やその他のプロパティに対しても反復処理を行うことになります。