TypeScript,循环字典

在我的代码中,我有两个字典(如在这里所示),它们是String索引。由于这是一个即兴的类型,我想知道是否有任何建议,我将如何能够循环通过每个键(或值,所有我需要的键无论如何)。感谢任何帮助!

myDictionary: { [index: string]: any; } = {};
483358 次浏览

要遍历键/值,使用for in循环:

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

Ian提到的键/值循环有一个警告。如果对象可能有附加到其原型的属性,并且当你使用in操作符时,这些属性将被包括在内。因此,您需要确保键是实例的属性,而不是原型的属性。较老的ie以indexof(v)显示为键而闻名。

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

& lt;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(dict).map(k => dict[k]);

或者这样:

Object.entries(dict).map([k,v] => /* ... */);

要得到钥匙:

function GetDictionaryKeysAsArray(dict: {[key: string]: string;}): string[] {
let result: string[] = [];
Object.keys(dict).map((key) =>
result.push(key),
);
return result;
}

答案很好,但你应该使用const而不是let作为键,因为它永远不会更新。

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

如果你只是为in一个没有If语句hasOwnProperty的对象,那么你将从linter得到如下错误:

for (const key in myobj) {
console.log(key);
}
WARNING in component.ts
for (... in ...) statements must be filtered with an if statement

所以解决方案是使用Object.keysof代替。

for (const key of Object.keys(myobj)) {
console.log(key);
}


希望这个帮手有人使用绒线。

这是我的函数,希望对大家有所帮助

function recordToArray<TypeOfSchema>(
data: Record<string, TypeOfSchema>
): Array<TypeOfSchema> {
return Object.keys(data).map((key: string) => ({ id: key, ...data[key] }));
}

使用es2019,现在更简单了:

  1. 我们可以系统地使用of
  2. 不再需要用Object.entries来包装字典

例子:

let someMap: Map<number, number> = new Map()
someMap.set(3, 7);
someMap.set(4, 12);
for (let [key, value] of someMap) {
console.log(key, value)
}

输出:

3 7
4 12

如果你只想通过对象值进行循环,请查看Object.values