Программирование во многом - разбивание задачи на части и потом сочетание этих частей вместе. Части должны быть желательно незавимимыми.
В этой задаче есть явно выделяемая часть - поиск суммы квадратов цифр. Напиши отдельную функцию, которая получает на вход число, и возвращает сумму квадратов цифр.
function getNumSquaresSum(num) {
}
Допустим она есть, тогда алгоритм выглядит так:
function isLucky(num) {
let occuredNumbers = {} // тут будем запоминать повторяющиеся суммы квадратов цифр
while (true) { // Бесконечный цикл. Условие выхода из цикла прописаны в теле самого цикла как return
let sum = getNumSquaresSum(num)
if (sum === 1) {
return true
} else {
// на какой-то итерации в occuredNumbers[sum] уже было записано значение суммы
// квадратов цифр, значит число - "несчастливое"
if (occuredNumbers[sum]) {
return false
}
occuredNumbers[sum] = true
num = sum
}
}
}