TypeScript,通过字典循环

时间:2013-04-23 16:07:40

标签: javascript html5 typescript

在我的代码中,我有几个字典(如建议的here),它是String索引的。由于这是一个临时类型,我想知道是否有任何建议我将如何能够遍历每个键(或值,无论如何我都需要键)。任何帮助表示赞赏!

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

9 个答案:

答案 0 :(得分:199)

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

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

答案 1 :(得分:98)

@Alcesem几乎是正确的,除了该方法的好处是不需要将hasOwnProperty()保护包含Object.keys,因为迭代器不会在原型链中进一步搜索。因此,以下内容不仅对字典安全,而且对Typescript和Javascript中的任何类型的对象都是安全的。

<强>&LT; ES 2017 :

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

&gt; = ES 2017

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

答案 2 :(得分:46)

Ian提到的键/值循环有一个警告。如果对象可能具有附加到其原型的属性,并且当您使用in运算符时,将包括这些属性。因此,您需要确保密钥是实例的属性,而不是原型的属性。较早的IE以indexof(v)显示为密钥而着称。

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

答案 3 :(得分:41)

这个怎么样?

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

答案 4 :(得分:3)

获取所有字典/对象值的最简单方法:

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

答案 5 :(得分:2)

Ians Answer是一个很好的选择,但是您应该使用const而不是let作为密钥,因为它永远不会更新。

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

答案 6 :(得分:2)

如果仅针对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);
}

希望这个助手可以用短绒棉纸。

答案 7 :(得分:0)

要获取密钥:

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

答案 8 :(得分:0)

这是我的功能,希望能帮到你

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