私のコードには、文字列インデックス付きの辞書がいくつかあります(推奨されているように ここ )。これはちょっとした即興型なので、各キーをループできるようにする方法(または値、とにかくキーが必要なすべて)について何か提案があるかどうか疑問に思いました。どんな助けにも感謝します
myDictionary: { [index: string]: any; } = {};
キー/値をループするには、for in
ループを使います。
for (let key in myDictionary) {
let value = myDictionary[key];
// Use `key` and `value`
}
このメソッドの利点は、反復子がプロトタイプチェーンをそれ以上検索しないため、hasOwnProperty()
ガードをObject.keys
で含める必要がないことです。そのため、以下は辞書に対して安全であるだけでなく、TypeScriptとJavascriptの両方におけるあらゆる種類のオブジェクトです。
<ES 2017:
Object.keys(obj).forEach(key => {
let value = obj[key];
});
> = ES 2017:
Object.entries(obj).forEach(
([key, value]) => console.log(key, value)
);
Ianが言及したキー/値ループには、注意点が1つあります。オブジェクトのプロトタイプに属性が付加されている可能性がある場合、およびin
演算子を使用すると、これらの属性が含まれます。そのため、キーがプロトタイプではなく、インスタンスの属性であることを確認する必要があります。古いIEはindexof(v)
がキーとして現れることで知られています。
for (const key in myDictionary) {
if (myDictionary.hasOwnProperty(key)) {
let value = myDictionary[key];
}
}
これはどう?
for (let [key, value] of Object.entries(obj)) {
...
}
すべての辞書/オブジェクト値を取得する最短の方法:
Object.keys(dict).map(k => dict[k]);