将Index Signature(字典)清理转换为Map?

时间:2018-01-10 02:46:50

标签: typescript json.net

截至今天,这是我知道如何在TypeScript中将Dictionary<K,V>(从Json.NET)转换为Map<K,V>的唯一方法:

const json = '{ "1": "one", "2": "two", "3": "three", "4": "four" }';
const dictionary = JSON.parse(json) as { [index: number]: string; };
const parsedMap = new Map<number, string>();
for (const i in dictionary) {
    if (!dictionary.hasOwnProperty(i)) { continue; }
    console.log(`dictionary[${i}]: ${dictionary[i]}`);
    parsedMap.set(parseInt(i, 10), dictionary[i]);
}
console.log(`parsedMap.size: ${parsedMap.size}`);
console.log(`parsedMap.get(4): ${parsedMap.get(4)}`);

是否有某些东西已经融入其他东西,使这种转换更清洁?这太冗长了吗?

1 个答案:

答案 0 :(得分:1)

如果您的环境有Object.entries()

const parsedMap = new Map(Object.entries(JSON.parse(json)))

请注意,这将使用键作为字符串,而不是数字。

如果你真的需要数字,(或者如果你没有Object.entries()),它会稍微长一点:

const dictionary = JSON.parse(json);
const parsedMap = new Map(Object.keys(dictionary).map(
     k => [parseInt(k, 10), dictionary[k]] as [number, string]
));