#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 или, предположительно, если ваш код транспилирован, то в этом правиле нет необходимости.