тогда будет всего 2 перебора если этого вам достаточно тогда можно а если вы не знаете сколько конкретно переборов будет, тогда нужна рекурсия или же что-то что будет выполняться при определенных условиях, например while
тут вам скорее всего нужно отбрасывать варианты которые уже участвовали что бы не получилось так что разные элементы которые начинаюстя или заканчиваются одинаковыми символами повторялись
как примерно это себе я представляю: 1) создать массив A где все элементы 2) хватать первый элемент и его критерию 3) вырезать этот элемент из массива А 4) сохранить результат в массив/объект 5) пробежаться по обновленному массиву А и найти элемент подходящий под критерию 6) переходим к пункту 3
добавил в if второе условие && !finArray.includes(elem) теперь оно if(first(elem) === crit && !finArray.includes(elem)){ стало выдавать на 3 элемента меньше
в этом случае не стоит использовать forEach, он пробегается по всем элементам лучше использовать for in и в момент когда вы нашли нужный элемент делать break; что бы останавливать перебор
кто нибудь игрался с face-api ? как делать если каждые несколько мс рисую изображение с камеры в канвас, и при сьемки нужно определить эмоцию, и face-api, тупо блокирует тред