Полифилл для Array.prototype.map() воспроизводит поведение встроенного метода, перебирая массив и применяя колбэк к каждому элементу, возвращая новый массив преобразованных значений.
Array.prototype.myMap = function (callback, thisArg) {
const result = [];
for (let i = 0; i < this.length; i++) {
if (i in this) {
result.push(callback.call(thisArg, this[i], i, this));
}
}
return result;
};
this ссылается на массив, на котором вызван методcallback.call(thisArg, ...) вызывает колбэк с опциональным thisArg в качестве контекста — если опущен, thisArg по умолчанию равен undefinedthis[i] — текущий элементi — текущий индексthis — исходный массивif (i in this) обрабатывает разреженные массивы, пропуская пустые слоты, точно так же, как встроенный map() это делаетresult возвращается, оставляя исходный массив неизменнымi in this важенРазреженные массивы содержат дыры — индексы без присвоенного значения:
const sparse = [1, , 3]; // индекс 1 пуст
Без проверки i in this пустые слоты некорректно порождали бы записи undefined в результате. Эта защита гарантирует, что только определённые элементы обрабатываются, корректно сохраняя разреженную структуру.
Проверка i in this в полифилле предотвращает попадание пустых слотов в разреженные массивы в результирующий массив, гарантируя, что результат сохраняет ту же разреженную структуру, что и исходный массив.
Новый — ещё не проверен сообществом
Вы