Как преобразовать индексную переменную в цикл for-in в машинописи? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть такой объект:

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])
})

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

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]);
});
0 голосов
/ 15 февраля 2019

Похоже, что Object.keys не имеет подписи шаблона (Object.keys<T>).Однако вы можете отобразить string[], возвращенный из Object.keys в конструктор Number, а затем передать его forEach.Подобно тому, что вы предложили.

Object.keys(obj)
    .map(Number)
    .forEach(index => {
        // index is a number here
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...