Здесь можно распаковать несколько вещей.
Прежде всего, "без использования петель".Можете ли вы объяснить причину этого требования?Не то чтобы я не сочувствую, поскольку я обычно избегаю явных циклов, но вы действительно должны объяснить , почему вы хотите это сделать.Существует два принципиально разных способа обработки упорядоченной коллекции: итеративный цикл и рекурсия.Если вы не используете рекурсивный код, возможно, где-то скрывается цикл.Он может быть скрыт внутри map
, filter
и т. Д., Что чаще всего является улучшением, но этот цикл все еще существует.
Во-вторых, компоновка этого фрагмента вводит в заблуждение:
const factor = number => Array
.from(Array(number), (_, i) => i)
.filter(i => number % i === 0)
Обычно, когда начинается несколько строк .methodName(...)
, каждый из этих методов работает с данными, предоставленными предыдущей строкой.Но from
здесь просто статический метод Array
;разделяя их так, это сбивает с толку.Любой из них был бы лучше, как и многие другие макеты:
const factor = number =>
Array.from(Array(number), (_, i) => i)
.filter(i => number % i === 0)
const factor = number => Array.from(
Array(number),
(_, i) => i
).filter(i => number % i === 0)
В-третьих, как уже отмечалось в комментариях и другом ответе, Array.from
принимает итеративную функцию и функцию отображения и возвращает массиви Array(number)
даст вам массив без значений, но который сообщит, что его длина равна number
, поэтому будет служить подходящей итерацией.Существует несколько эквивалентных способов написать это, например:
Array.from({length: number}, (_, i) => i)
[...Array(number)].map((_, i) => i)
В-четвертых, вы упомянули это:
const factors = evens.map((number => {
return factor(number)
}))
(опечатка исправлена)
Хотя в этом нет ничего плохого, вы, возможно, захотите признать, что это можно записать гораздо более четко, как
const factors = evens.map(factor)
Наконец, в этом коде факторинга отсутствует серьезная настройка производительности.Вы проверяете каждое возможное значение до n
, когда вы действительно можете найти факторы в парах, тестируете только до sqrt(n)
.Это серьезная разница.Не существует известного эффективного метода факторинга, что, вероятно, является хорошей вещью, поскольку современное шифрование зависит от того, является ли это сложной проблемой.Но вы, скорее всего, не хотите делать это намного хуже, чем должно быть.