Стараюсь в работе все больше использовать функциональный подход. Непривычно, но плюсы перевешивают. Ввиду отсутствия опыта возникают тривиальные вопросы. Вот один из них. Есть массив объектов двух типов: `Word` `Separator`. К примеру, такой:
[Word, Separator, Word, Separator, Separator, Word, Separator] или
[Word, Separator, Word, Separator, Word] задача - получить хвост списка до предпоследнего слова. В первом примере это
[Separator, Separator, Word, Separator] во втором -
[Separator, Word]. В процедурном стиле все понятно. В функциональном - тоже как-нибудь напишу. Вопрос в том, как сделать красиво и правильно?
PS. Написал. Но уж очень как-то не очень...
this.words.reverse().reduce((accum, w) => {
if (accum.wordsCount == 0) {
if (w instanceof Word) {
accum.wordsCount += 1;
}
accum.tail = [w, ...accum.tail];
} else if (accum.wordsCount == 1) {
if (w instanceof Separator) {
accum.tail = [w, ...accum.tail];
} else {
accum.wordsCount += 1;
}
}
return accum;
}, {tail: [], wordsCount: 0}).tail;