Определение результата функции с Promise и разреженными массивами

ajax() возвращает Promise, который разрешается разреженным массивом длиной 82. Заполнены только индексы 0, 1, 4, 9, 16, 25, 36, 49, 64 и 81.

Короткий ответ

Что ответить на собеседовании

ajax() возвращает Promise, который разрешается разреженным массивом длиной 82. Заполнены только индексы 0, 1, 4, 9, 16, 25, 36, 49, 64 и 81.

Подробный разбор

Ответ с пояснениями

Условие

Какой результат будет возвращён при вызове функции

const ajax = () => new Promise((resolve, reject) => {
  const result = [];
  for (let id = 0; id < 10; id++) {
    result[id * id] = {
      id,
      hash: Math.ceil(Math.random() * 10)
    };
  }
  resolve(result);
});

Ответ

ajax() возвращает Promise, который разрешается разреженным массивом длиной 82. Заполнены только индексы 0, 1, 4, 9, 16, 25, 36, 49, 64 и 81.

Для id от 0 до 9 объект записывается по id * id. Наибольший индекс 81 задаёт length=82, но реально созданных элементов лишь десять; промежутки — пустые позиции, не явно записанный undefined.

Каждый объект содержит соответствующий id и случайный hash. Math.ceil(Math.random()*10) обычно даёт 1–10, но допускает 0, если Math.random вернул ровно 0; для диапазона 1–10 надёжнее Math.floor(Math.random()*10)+1. Конкретные hash предсказать нельзя. Executor выполняется синхронно, а получение результата через then — асинхронно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее