web-dev-qa-db-ja.com

TypeScript、辞書を通したループ

私のコードには、文字列インデックス付きの辞書がいくつかあります(推奨されているように ここ )。これはちょっとした即興型なので、各キーをループできるようにする方法(または値、とにかくキーが必要なすべて)について何か提案があるかどうか疑問に思いました。どんな助けにも感謝します

myDictionary: { [index: string]: any; } = {};
128
ben657

キー/値をループするには、for inループを使います。

for (let key in myDictionary) {
    let value = myDictionary[key];
    // Use `key` and `value`
}
202
Ian

このメソッドの利点は、反復子がプロトタイプチェーンをそれ以上検索しないため、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)
);
100
Stephen Paul

Ianが言及したキー/値ループには、注意点が1つあります。オブジェクトのプロトタイプに属性が付加されている可能性がある場合、およびin演算子を使用すると、これらの属性が含まれます。そのため、キーがプロトタイプではなく、インスタンスの属性であることを確認する必要があります。古いIEはindexof(v)がキーとして現れることで知られています。

for (const key in myDictionary) {
    if (myDictionary.hasOwnProperty(key)) {
        let value = myDictionary[key];
    }
}
46
Jamie Starke

これはどう?

for (let [key, value] of Object.entries(obj)) {
    ...
}
41

すべての辞書/オブジェクト値を取得する最短の方法:

Object.keys(dict).map(k => dict[k]);
0
k06a