for..of loopを使用してください。
const object = {
some: "string",
number: 42
};
for (const [key, value] of Object.entries(object)) {
console.log(key, value);
}
とにかくオブジェクトの上に配列
const array = [1, 2];
array.foo = "test";
for (const number of array) {
console.log(number); // skips array.foo
}
反復処理をオーバー
反復処理は、ビューのコードスタイルの点から、あなたはまだあなたがそれを反復する前に、オブジェクトが配列であるかどうかを確認する必要があります。あなたはそれを達成するためにArray.isArrayを使用することができます。 JavaScriptを、typeof [] === "object"
(すなわち配列はそのキーとして要素のインデックスを使用するオブジェクトである)で、あなたがそれを減らすことができるので
if (Array.isArray(data)) {
for (const element of data) {
// Iterate over array
}
}
else {
for (const [key, value] of Object.entries(data)) {
// Iterate over object
}
}
ジェネリックループ
:だから、data
と仮定すると、オブジェクトまたは配列のいずれかでありますシングルループObject.entriesと:
for (const [key, value] of Object.entries(data)) {
// For arrays, `key` will be the index
}
は、この後者の方法は、動的プロパティのあなたの除外に正義をしないだろうということに注意してくださいのに(例えば、 g。 array.foo
)、Object.entries
の結果を反復処理します。 の場合はで除外する必要があります。上記のようにArray.isArray
の2つのfor..of
ループを使用してください。
あなたが扱っているどのような種類がわからない場合、あなたはあなたが扱っているものの種類を知る立場に自分を入れてみてください。これは、同僚による過失致死を防ぐための最も簡単な方法です。 –
あなたのコメントにはっきりと同意します。透明性は常に求められています。あいまいさの理由は、Javascriptにコンパイルされた動的言語用のコンパイラを作成していることです。そのため、ループのソースが何であるかは必ずしも分かりませんので、実行時に動作するforループを作成する一般的な方法が必要でした。 – cbillingham
JSではすべてがObjectです。したがって、実際の違いがないので、配列や関数をオブジェクトとして扱う方が賢明かもしれません。上の例では 'x = [1、2];バツ。foo = "foo"; 'Object.keys(x)は' ["0"、 "1"、 "foo"] 'をリストしますが、彼はあなたに列挙できない' length'プロパティを表示しません。場合によっては 'Object.getOwnPropertyNames(x);'を使うことを選ぶかもしれませんし、 '[" 0 "、" 1 "、" length "、" foo "]のように列挙可能でもなくても、 – Redu