如何遍历Map <string,string =“”>?

时间:2018-09-12 17:03:39

标签: javascript typescript

我有一个类型为Map<string, string>的对象:

const foo = new Map<string, string>();

// e.g. foo is one => "1", two => "2", three => "3" etc.

我知道我可以使用以下所有键:

const keys = Object.keys(foo);

但是当我尝试使用以下方法获取每个相应的值时:

keys.forEach(k => {const val = foo[k]});

我收到以下错误:

type Map<string, string> has no index signature.

我需要能够遍历每个键值。有想法吗?

更新

我不得不说,我将通过ajax调用接收到的json的结果强制转换为Map<string, string>类型,例如给定api调用返回的以下json:

{
    one: "1",
    two: "2",
    three: "3"
}

然后我要执行以下操作:

const response = await this.axios.get<Map<string, string>>("some/api");
const foo = response.data;

2 个答案:

答案 0 :(得分:2)

您的问题并未显示尝试使用foo.forEach(),但确实尝试使用keys.forEach()const keys = Object.keys(foo)不能 获取foo: Map<string, string>的密钥,但是几乎可以肯定会返回空的string[]

要获取keys中的Map<string, string>并对其进行迭代,可以执行以下操作:

for (const key of foo.keys()) {
  // each key of foo
}

Array.from(foo.keys()).forEach(key => {
  // each key of foo
})

此外,axios从不返回Map<string, string>,根据您的用法,您可能是指Object,或者可以使用更专业的类型,例如type Dictionary<T> = { [K: string]: T }

const response = await this.axios.get<Dictionary<string>>("some/api");
const foo = response.data
const keys = Object.keys(foo)

keys.forEach(key => { ... })

答案 1 :(得分:0)

使用Map.forEach时:第一个参数是值,第二个是键。除非您使用第3个参数(它本身就是地图),否则不需要.get调用。

const foo = new Map();

foo.set('foo', 'bar');
foo.set('bar', 'foo');

foo.forEach(function(v, k, fooMap){
  console.log(`map key: ${k}, map value: ${v}, fooMap: ${fooMap.get(k)}`);
})