ajax() возвращает Promise, который разрешается разреженным массивом длиной 82. Заполнены только индексы 0, 1, 4, 9, 16, 25, 36, 49, 64 и 81.
Определение результата функции с Promise и разреженными массивами
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 — асинхронно.