Найдите коэффициенты числа и верните n-ю позицию

#javascript #async-await

Вопрос:

n и k являются входными данными, 10, 3 соответственно
, Найдите коэффициенты n => 1,2,5,10>
верните K-е значение => 5>
Я становлюсь неопределенным.
Просто изучаю asych/await, это, вероятно, проблема.

функция pthFactor(n, k) {
// Напишите свой код здесь
getFactors(n,k);

 async function getFactors(n,k) {
    let promise = new Promise((resolve, reject) => {
        setTimeout(() => resolve("done!"),7000)
    });
    if (n === 1 || k === 1) {
        return 1;
    }
    let result = await promise;
    console.log(result);

    let factors = [];
    console.log(factors);
    for (let i = 1; i <= n; i  ) {
    if (n > 10 ** 15 || k > 10 ** 9) {
        continue;
    }
    if (n % i === 0) {
        factors.push(i);
        console.log(factors);
            if ( factors.length === k) {
               return factors[k-1]; 
            }
    }
    console.log(factors);
    return 0;
    }
}
 

}

console.log(pthФактор(10, 3));

Комментарии:

1. Код должен возвращать 5, а не неопределенный. На основе входных данных 10 и 3.

Ответ №1:

Ваше return 0 утверждение неуместно, и ваш цикл всегда завершится после первой итерации. Перемещение за return 0 пределы цикла устранит вашу проблему.

 async function getFactors(n, k) {
  let promise = new Promise((resolve, reject) => {
    // I made this timeout shorter, makes the example more interactive
    setTimeout(() => resolve('done!'), 1000);
  });
  if (n === 1 || k === 1) {
    return 1;
  }

  let result = await promise;

  let factors = [];

  for (let i = 1; i <= n; i  ) {
    if (n > 10 ** 15 || k > 10 ** 9) {
      continue;
    }
    if (n % i === 0) {
      factors.push(i);
      if (factors.length === k) {
        return factors[k - 1];
      }
    }
  }
  return 0;
}

// Log result
(async() => {
  const factor = await getFactors(10, 3);
  console.log(`async getFactors: `, factor);
})();