В моем коде у меня есть несколько словарей (как предложено здесь), которые индексируются String. Из-за того, что это немного импровизированный тип, мне было интересно, есть ли какие-либо предложения о том, как я мог бы прокручивать каждую клавишу (или значение, все, что мне нужно для ключей в любом случае). Любая помощь ценится!
myDictionary: { [index: string]: any; } = {};
Чтобы перебрать ключ/значения, используйте цикл for in
:
for (let key in myDictionary) {
let value = myDictionary[key];
// Use `key` and `value`
}
Существует одна оговорка к циклу ключа/значения, о котором упоминал Ян. Если возможно, что объекты могут иметь атрибуты, прикрепленные к их прототипу, а когда вы используете оператор in
, эти атрибуты будут включены. Поэтому вам нужно убедиться, что ключ является атрибутом вашего экземпляра, а не прототипом. Старые IE известны тем, что indexof(v)
отображается как ключ.
for (var key in myDictionary) {
if (myDictionary.hasOwnProperty(key)) {
var value = myDictionary[key];
}
}
key
и value
могут быть const
.
@Alcesem имел это почти право, за исключением того, что преимущество этого метода состоит в том, что не нужно включать hasOwnProperty()
guard с 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)
);
Как насчет этого?
for (let [key, value] of Object.entries(obj)) {
...
}
Я также поднимусь, чтобы один способ захватить значение, присвоенное переменной "ключ":
Object.keys(myDictionary).forEach(key => {
if (myDictionary.hasOwnProperty(key)) {
var value = myDictionary[key];
}
});
for (var key in myDictionary) { }
? Внутри цикла вы использовали быkey
чтобы получить ключ, иmyDictionary[key]
чтобы получить значение