Создание собственного метода массивного фильтра

filter2 должен зафиксировать начальную длину, пропускать отсутствующие индексы и передавать predicate значение, индекс и массив. Новый массив содержит исходные значения, прошедшие проверку.

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

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

filter2 должен зафиксировать начальную длину, пропускать отсутствующие индексы и передавать predicate значение, индекс и массив. Новый массив содержит исходные значения, прошедшие проверку.

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

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

Условие

Требуется реализовать собственный метод filter2, работающий аналогично встроенному Array.prototype.filter. Метод должен принимать функцию‑предикат и возвращать новый массив, содержащий только те элементы, для которых предикат вернул truthy‑значение.

const numbers = [1, 2, 3, 4, 5];

const result1 = numbers.filter(item => item % 2);
console.log(result1); // [1, 3, 5]

// const result2 = numbers.filter2(item => item % 2);

Ответ

filter2 должен зафиксировать начальную длину, пропускать отсутствующие индексы и передавать predicate значение, индекс и массив. Новый массив содержит исходные значения, прошедшие проверку.

Object.defineProperty(Array.prototype, 'filter2', {
  configurable: true, writable: true,
  value: function (predicate, thisArg) {
    'use strict';
    if (this == null) throw new TypeError('Нет массива');
    if (typeof predicate !== 'function') throw new TypeError('Нет предиката');
    const source = Object(this), length = source.length;
    const result = [];
    for (let i = 0; i < length; i++) {
      if (!(i in source)) continue;
      const value = source[i];
      if (predicate.call(thisArg, value, i, source)) result.push(value);
    }
    return result;
  }
});

Это учебная реализация для обычных массивов, не полный polyfill со Species и нормализацией произвольного array-like length. Значение сохраняется до callback: предикат может изменить исходный элемент. Добавленные за исходной длиной элементы не проверяются. Расширять глобальный прототип в продукте без необходимости не стоит.

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

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

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

Подробнее