我有一个这样的对象:
const lettersAtIndex: {[index: string]: string[]} = {4: ['a', 'b'], 6: ['c', 'f']}
我想遍历它:
Object.keys(lettersAtIndex).forEach(index => {
doSomething(lettersAtIndex[index]) // index expression is not of type number
doSomething2(lettersAtIndex[index]) // index expression is not of type number
doSomething3(lettersAtIndex[index]) // index expression is not of type number
})
将index
强制转换为数字的建议方式是什么。我应该只创建另一个变量吗?
Object.keys(lettersAtIndex).forEach(index => {
const numericIndex = Number(index)
doSomething(lettersAtIndex[numericIndex])
doSomething2(lettersAtIndex[numericIndex])
doSomething3(lettersAtIndex[numericIndex])
})
答案 0 :(得分:1)
似乎Object.keys
没有模板签名(Object.keys<T>
)。但是,您可以将string[]
返回的Object.keys
映射到Number
构造函数,然后将其传递给forEach
。类似于您的建议。
Object.keys(obj)
.map(Number)
.forEach(index => {
// index is a number here
});
答案 1 :(得分:1)
Object.keys
总是返回一个字符串,因此,上面的方法很好。
但是对于您而言,我认为index
与这些功能无关,所以为什么不使用
Object.values(lettersAtIndex).forEach(val => {
doSomething(val)
//...
})
如果您需要索引为数字,并且不想对其进行转换,则可以考虑同时使用Map
const lettersAtIndex = new Map<number, string[]>([[4, ['a', 'b']], [6, ['c', 'f']]]);
Array.from(lettersAtIndex.keys()).forEach((index) => {
doSomething(lettersAtIndex[index]);
});