我有一个类型为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;
答案 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)}`);
})