Функции высшего порядка [закрыт]

103
02 августа 2019, 23:20

Всем доброго времени суток

Помогите решить задачку: Нужно написать аналог метода every. "Создайте функцию every, она должна принимать первым аргументом массив чисел (обязательно проверьте что передан массив) вторым аргументом callback функция должна возвращать true или false в зависимости от результата вызова callback (проверить число больше 5). Callback должен принимать один элемент массива, его индекс в массиве и весь массив." Всем спасибо

Answer 1

Пример полифилла можно найти в справке по функции every

if (!Array.prototype.every) {
  Array.prototype.every = function(callbackfn, thisArg) {
    'use strict';
    var T, k;
    if (this == null) {
      throw new TypeError('this is null or not defined');
    }
    // 1. Положим O равным результату вызова ToObject над значением
    //    this, переданным в качестве аргумента.
    var O = Object(this);
    // 2. Положим lenValue равным результату вызова внутреннего метода Get
    //    объекта O с аргументом "length".
    // 3. Положим len равным ToUint32(lenValue).
    var len = O.length >>> 0;
    // 4. Если IsCallable(callbackfn) равен false, выкинем исключение TypeError.
    if (typeof callbackfn !== 'function') {
      throw new TypeError();
    }
    // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
    if (arguments.length > 1) {
      T = thisArg;
    }
    // 6. Положим k равным 0.
    k = 0;
    // 7. Пока k < len, будем повторять
    while (k < len) {
      var kValue;
      // a. Положим Pk равным ToString(k).
      //   Это неявное преобразование для левостороннего операнда в операторе in
      // b. Положим kPresent равным результату вызова внутреннего метода
      //    HasProperty объекта O с аргументом Pk.
      //   Этот шаг может быть объединён с шагом c
      // c. Если kPresent равен true, то
      if (k in O) {
        // i. Положим kValue равным результату вызова внутреннего метода Get
        //    объекта O с аргументом Pk.
        kValue = O[k];
        // ii. Положим testResult равным результату вызова внутреннего метода Call
        //     функции callbackfn со значением T в качестве this и списком аргументов,
        //     содержащим kValue, k и O.
        var testResult = callbackfn.call(T, kValue, k, O);
        // iii. Если ToBoolean(testResult) равен false, вернём false.
        if (!testResult) {
          return false;
        }
      }
      k++;
    }
    return true;
  };
}
Answer 2
Array.prototype.every = (..arg) => {
   this.every(...arg);
}
READ ALSO
Node.js + Webpack + TypeScript: __dirname возвращает корень диска C

Node.js + Webpack + TypeScript: __dirname возвращает корень диска C

Есть библиотека, которая разрабатывается по ходу, и основной проект, в котором эта библиотека используетсяДопустим:

117
Автонажатие TamperMonkey

Автонажатие TamperMonkey

Есть ссылка с классом button primary marginBlock _participateNow Есть код взятый с интернета

121
Почему не могу вызвать метод jQuery через $

Почему не могу вызвать метод jQuery через $

Всем привет! Обнаружил странную проблемуУ меня есть jQuery плагин, который подключается таким вот образом

120
Scroll постоянно приходится опускать вниз

Scroll постоянно приходится опускать вниз

Запуск страници, скрол внизуОтправил сообщение Клиент -> сервер-> клиент Скрол на месте сообщение внизу,не видно,приходится крутить скролл

97