Сглаживание графика без цикла for

#javascript #generator #eslint

Вопрос:

Я создал эту функцию,

 function* flattenErrorSchema(errorSchema, path = '') {
  if (errorSchema) {
    // eslint-disable-next-line es/no-for-of-loops
    for (const [key, value] of Object.entries(errorSchema)) {
      if (key === '__errors') {
        yield* value.map((error) => `${path} : "${error}"`);
      } else {
        yield* flattenErrorSchema(value, `${path}${path ? ' -> ' : ''}${key}`);
      }
    }
  }

  return;
}
 

Он использует errorSchema опору RJSF, которая может выглядеть примерно так,

 {
  data: {
    propA: {
      __errors: ['This is not right'],
    },
    propB: {
      __errors: ['Also wrong', 'This is bad'],
    },
  },
}
 

и выдает последовательность сообщений, которые выглядят следующим образом,

 [
  'data -> propA : "This is not right"',
  'data -> propB : "Also wrong"',
  'data -> propB : "This is bad"',
]
 

Все это работает хорошо, но, как вы можете видеть, мне пришлось отключить правило ESLint,

 // eslint-disable-next-line es/no-for-of-loops
 

Есть ли способ достичь той же функциональности без использования цикла «для», который позволяет избежать распределений и «уродливого», «вонючего» кода?

Комментарии:

1. зачем вам отключать for of циклы?

2. @георг, это разумный вопрос, который я задал себе. Если ответ на этот вопрос звучит так: «Нет, лучшего способа сделать это нет», то, возможно, это правило будет смягчено.

3. Насколько я понимаю, цель этого правила-предупредить вас о вещах ES6, если вы ориентируетесь на более старую платформу. Если это не так, в этом нет необходимости.

4. @georg или, предположительно, если ваш код транспилирован, то в этом правиле нет необходимости.