TypeScript, Цитирование через словарь

В моем коде у меня есть пара словарей (как предложено здесь), которые проиндексированы в виде строки. Из-за того, что это что-то вроде импровизированного типа, мне было интересно, есть ли какие-нибудь предложения о том, как я смогу пройтись по каждому ключу (или значению, все, для чего мне все равно нужны ключи). Любая помощь приветствуется!

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

Ответ 1

Чтобы перебрать ключ/значения, используйте цикл for in:

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

Ответ 2

@Alcesem сделал это почти правильно, за исключением того, что преимущество этого метода состоит в том, что нет необходимости включать защиту hasOwnProperty() в Object.keys, потому что итератор не будет искать дальше по цепочке прототипов. Поэтому следующее безопасно не только для словарей, но и для любого типа объектов как в Typescript, так и в Javascript.

& Lt; ES 2017:

Object.keys(obj).forEach(key => {
  let value = obj[key];
});

> = ES 2017:

Object.entries(obj).forEach(
  ([key, value]) => console.log(key, value)
);

Ответ 3

Есть одно предостережение о цикле ключ/значение, о котором говорил Ян. Если возможно, что у Объектов могут быть атрибуты, связанные с их Прототипом, и когда вы используете оператор in, эти атрибуты будут включены. Таким образом, вы захотите убедиться, что ключ является атрибутом вашего экземпляра, а не прототипа. Старые IE известны тем, что indexof(v) отображается в качестве ключа.

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

Ответ 4

Как насчет этого?

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

Ответ 5

Я также поднимусь, чтобы один способ захватить значение, присвоенное переменной "ключ":

Object.keys(myDictionary).forEach(key => {
    if (myDictionary.hasOwnProperty(key)) {    
        var value = myDictionary[key];
    }
});

Ответ 6

Кратчайший способ получить все значения словаря/объекта:

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