Задать вопрос
  • Как прочитать данные json по ссылке?

    Aetae
    @Aetae Куратор тега JavaScript
    Первые две строчки именно это и делают, поменяй ссылку и читай, в чём, блин, вопрос?

    // Если там ссылка на чужой сайт - ответ никак.
    // Использовать element.innerHTML += 'text' нельзя, потому что это шорткат для element.innerHTML = element.innerHTML + 'text', что сбрасывает всё содержимое element и отрисовывает его заново.
  • Как понять уязвим запрос к бд или нет?

    Aetae
    @Aetae
    ...в теории. Мы же не знаем что там в $db->prepare происходит. ;)
  • Почему после аменда 'git commit --amend --no-edit' не могу запушить на Github?

    Aetae
    @Aetae
    Влад,
    Тогда почему, когда ты смотришь коммиты git log, коммит, произведенный через аменд, отсутствует?
    потому что старый он тупо удаляет и на его место делает новый.
  • Возможно сократить тернарный оператор с new date()?

    Aetae
    @Aetae Куратор тега JavaScript
    Mesuti, твой первый вариант лучше. Тут лишние телодвижения абсолютно ни за чем.
    Повторять не стоит куски кода больше пары строк. Создание объекта - это нормально.
  • Как синхронизировать асинхронною функцию?

    Aetae
    @Aetae Куратор тега JavaScript
    SomeHuman2, ну значит таки напиши(или найди готовые) лоадеры и добавь в конфиг вебпака, а потом пиши что-то типа:
    require("!!raw-loader!extract-css-loader!minify-css-loader!sass-loader!../extensions/main.scss").default

    или настрой цепочку лоадеров по особому параметру урл:
    require("./extensions/main.scss?сделать-хорошо")

    В общем углубись в доки вебпака.
  • Как читать дженерики в TypeScript?

    Aetae
    @Aetae Куратор тега TypeScript
    Максим Белоусов, это обычный тип:
    { 
      new (...args: any[]): {};
      foo: string;
      bar: bumber;
    }
  • Как синхронизировать асинхронною функцию?

    Aetae
    @Aetae Куратор тега JavaScript
    SomeHuman2, Наверное как-то так:
    import("!!raw-loader!sass-loader!./MyScss.scss")
      .then(MINIFY_CSS)
      .then(EXTRACT_CSS)
      .then(console.log);

    Смотря чего именно вы хотите.

    Только у вас в тегах webpack, а webpack это вам не gulp, он сам прогонит через цепочку loader'ов, что заданы в конфиге. А если нужно что-то особое - можно и свой loader написать, это совсем не сложно.
  • Почему рекурсивную функцию нужно присваивать переменной при работе с декоратором?

    Aetae
    @Aetae Куратор тега JavaScript
    salat228, уберём дуратские имена:
    let variableVithFactorialFuction = function factorial(num) {
      if (num == 1) {
        return num
      } else {
        return num * factorial(num - 1)
      }
    }
    
    function logResultDecorator(func) {
      return function() {
        let result = func.apply(this, arguments)
        console.log('Результат функции: ', result)
      }
    }
    
    variableVithFactorialFuction = logResultDecorator(variableVithFactorialFuction)
    
    variableVithFactorialFuction(5)

    В данном случае логирутся первый вызов, а последующие рекуривные вызовы обращаются не к декорированой variableVithFactorialFuction, а к оригинальной factorial (см. else блок).

    В первом же случае:
    function factorial(num) {
      if (num == 1) {
        return num
      } else {
        return num * factorial(num - 1)
      }
    }
    
    function logResultDecorator(func) {
      return function() {
        let result = func.apply(this, arguments)
        console.log('Результат функции: ', result)
      }
    }
    
    factorial = logResultDecorator(factorial)
    
    factorial(5)

    перезаписывается ещё до вызова оригинальная функция factorial, потому рекурсивные вызовы внутри неё вызывают уже перезаписаную декорированную версию.

    Ну и чтобы не было nan декоратор, очевидно, должен возвращать результат, а не только логировать:
    function factorial(num) {
      if (num == 1) {
        return num
      } else {
        return num * factorial(num - 1)
      }
    }
    
    function logResultDecorator(func) {
      return function() {
        let result = func.apply(this, arguments);
        console.log('Результат функции: ', result);
        return result;
      }
    }
    
    factorial = logResultDecorator(factorial)
    
    factorial(5)
  • Как выровнять строки?

    Aetae
    @Aetae Куратор тега JavaScript
    Konstantin_555,
    if (!Array.prototype.reduce) {
      Array.prototype.reduce = function(callback/*, initialValue*/) {
        'use strict';
        if (this == null) {
          throw new TypeError('Array.prototype.reduce called on null or undefined');
        }
        if (typeof callback !== 'function') {
          throw new TypeError(callback + ' is not a function');
        }
        var t = Object(this), len = t.length >>> 0, k = 0, value;
        if (arguments.length >= 2) {
          value = arguments[1];
        } else {
          while (k < len && ! (k in t)) {
            k++;
          }
          if (k >= len) {
            throw new TypeError('Reduce of empty array with no initial value');
          }
          value = t[k++];
        }
        for (; k < len; k++) {
          if (k in t) {
            value = callback(value, t[k], k, t);
          }
        }
        return value;
      };
    }
    if (!Array.prototype.map) {
    
      Array.prototype.map = function(callback, thisArg) {
    
        var T, A, 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(callback) равен false, выкидываем исключение TypeError.
        // Смотрите (en): http://es5.github.com/#x9.11
        // Смотрите (ru): http://es5.javascript.ru/x9.html#x9.11
        if (typeof callback !== 'function') {
          throw new TypeError(callback + ' is not a function');
        }
    
        // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
        if (arguments.length > 1) {
          T = thisArg;
        }
    
        // 6. Положим A равным новому массиву, как если бы он был создан выражением new Array(len),
        //    где Array является стандартным встроенным конструктором с этим именем,
        //    а len является значением len.
        A = new Array(len);
    
        // 7. Положим k равным 0
        k = 0;
    
        // 8. Пока k < len, будем повторять
        while (k < len) {
    
          var kValue, mappedValue;
    
          // 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. Положим mappedValue равным результату вызова внутреннего метода Call
            //     функции callback со значением T в качестве значения this и списком
            //     аргументов, содержащим kValue, k и O.
            mappedValue = callback.call(T, kValue, k, O);
    
            // iii. Вызовем внутренний метод DefineOwnProperty объекта A с аргументами
            // Pk, Описатель Свойства
            // { Value: mappedValue,
            //   Writable: true,
            //   Enumerable: true,
            //   Configurable: true }
            // и false.
    
            // В браузерах, поддерживающих Object.defineProperty, используем следующий код:
            // Object.defineProperty(A, k, {
            //   value: mappedValue,
            //   writable: true,
            //   enumerable: true,
            //   configurable: true
            // });
    
            // Для лучшей поддержки браузерами, используем следующий код:
            A[k] = mappedValue;
          }
          // d. Увеличим k на 1.
          k++;
        }
    
        // 9. Вернём A.
        return A;
      };
    }
    if (!String.prototype.repeat) {
      String.prototype.repeat = function(count) {
        'use strict';
        if (this == null) {
          throw new TypeError('can\'t convert ' + this + ' to object');
        }
        var str = '' + this;
        count = +count;
        if (count != count) {
          count = 0;
        }
        if (count < 0) {
          throw new RangeError('repeat count must be non-negative');
        }
        if (count == Infinity) {
          throw new RangeError('repeat count must be less than infinity');
        }
        count = Math.floor(count);
        if (str.length == 0 || count == 0) {
          return '';
        }
        // Обеспечение того, что count является 31-битным целым числом, позволяет нам значительно
        // соптимизировать главную часть функции. Впрочем, большинство современных (на август
        // 2014 года) браузеров не обрабатывают строки, длиннее 1 << 28 символов, так что:
        if (str.length * count >= 1 << 28) {
          throw new RangeError('repeat count must not overflow maximum string size');
        }
        var rpt = '';
        for (var i = 0; i < count; i++) {
          rpt += str;
        }
        return rpt;
      }
    }
    if (!Array.prototype.fill) {
      Object.defineProperty(Array.prototype, 'fill', {
        value: function(value) {
    
          // Шаги 1-2.
          if (this == null) {
            throw new TypeError('this is null or not defined');
          }
    
          var O = Object(this);
    
          // Шаги 3-5.
          var len = O.length >>> 0;
    
          // Шаги 6-7.
          var start = arguments[1];
          var relativeStart = start >> 0;
    
          // Шаг 8.
          var k = relativeStart < 0 ?
            Math.max(len + relativeStart, 0) :
            Math.min(relativeStart, len);
    
          // Шаги 9-10.
          var end = arguments[2];
          var relativeEnd = end === undefined ?
            len : end >> 0;
    
          // Шаг 11.
          var final = relativeEnd < 0 ?
            Math.max(len + relativeEnd, 0) :
            Math.min(relativeEnd, len);
    
          // Шаг 12.
          while (k < final) {
            O[k] = value;
            k++;
          }
    
          // Шаг 13.
          return O;
        }
      });
    }
    
    var minGap = 3;
    var keys = ['name', 'price'];
    var input = [{
      name: "абрикосы",
      price: 20
    }, {
      name: "тыква",
      price: 50
    }, {
      name: "уи",
      price: 1000
    }];
    var maxLengths = keys.slice().fill(0);
    var normalizedInput = input.map(function (item) {
      return keys.reduce(function (acc, key, i) {
        var current = String(item[key]);
        var currentLength = current.length;
        if (currentLength > maxLengths[i]) maxLengths[i] = currentLength;
        acc[key] = current;
        acc.length += currentLength;
        return acc;
      }, {
        length: 0
      });
    });
    var maxLength = maxLengths.reduce(function (sum, current) {
      return sum + current;
    }, minGap);
    var res = normalizedInput.map(function (_ref) {
      var name = _ref.name,
          price = _ref.price,
          length = _ref.length;
      return name + ' '.repeat(maxLength - length) + price;
    }).join('\n');


    В какой "программе" он не работает? Где ты пытаешься его запустить, в каком браузере\окружении?
    Тупо js из под винды? Если да - то не стоит оно того, там движок от ie6 под капотом, больше страдания чем пользы. Если очень хочется - через hta можно под ie11 запускать, но лучше просто поставить node и пускать через неё.
  • Изменение наследуемых свойств в классах?

    Aetae
    @Aetae Куратор тега JavaScript
    spoT1, 1ая ошибка устаревшая, первая версия классов не умела ничего кроме методов.
    Остальные слишком абстрактные без привязки к конкретному коду, но скорее всего из той же оперы.
  • Не работает react-router-dom?

    Aetae
    @Aetae
    saiasasd,
    на сайте, который вы скинули, Link лежит сам по себе
    https://reactrouter.com/docs/en/v6/getting-started...
  • Есть идеи как адаптировать эту верстку?

    Aetae
    @Aetae
    Владислава, а я попытался и у меня изменилось. Потому ответ: ты что-то сделала не так. Что я ещё могу сказать то?
    Нужен конкретный код твоих попыток.
  • Есть идеи как адаптировать эту верстку?

    Aetae
    @Aetae
    Владислава, по поводу же того как адаптировать, можно, увы ответить лишь: "берёте и адаптируете, duh".
    Тут, как уже заметли, следует задавать конкретные вопросы: "Я делаю А, хочу получить Б, получается С или не получается ничего. ЧЯДНТ?"
    Никто не будет изучать детально чей-то большой кусок кода.

    По поводу наездов(хотя конкретно тут это прям в совсем лёгкой форме, скорее всего даже не заметной для отвечающего): это тоже интернет-этикет, который можно охарактеризовать как "обиделся - проиграл". Если ты не упаковал в свою информативную фразу скрытый укол, то, считай, зря сотряс воздух, нет тогда перчинки в общении.)
    Никакого злого умыла тут нет. В конце концов общение - поединок разумов.)
  • Есть идеи как адаптировать эту верстку?

    Aetae
    @Aetae
    Владислава, по поводу "хамства" в интернете, вам следует сразу понять, что в интернете все братья и общаться принято соответственно: как будто с вами всю жизнь прожили, без экивоков. Не ждите тут обращений на вы и политкорретной речи.)
  • Как подписаться на уже существующий Event?

    Aetae
    @Aetae Куратор тега JavaScript
    symnoob, попробуй, какие проблемы?
    Скорее всего сработает, jquery это всего-лишь обёртка.
  • Как выровнять строки?

    Aetae
    @Aetae Куратор тега JavaScript
    Konstantin_555, если использовать моноширинный шрифт - всё будет чётко, на то он и моноширинный.
    Для обычного шрифта можно в теории вычислить все размеры и подсчитывать используя сие знание. Но это не просто.)
  • Мой код выглядит плохо или отлично?

    Aetae
    @Aetae Куратор тега JavaScript
    Чуваки, которые не пишут ; - лишние в js.