Ответы пользователя по тегу JavaScript
  • Как отловить событие, которое получено в результате события?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если код свой, то организовать его так, чтобы при изменении значения скриптом, вызывался обработчик change. Ведь это просто функция, которую можно вызвать. А по-хорошему должна быть отдельная функция, которая вызывается, как из обработчика change, так и из обработчика click, а также из всех других мест, где меняется значение.

    Если код чужой, или удобнее считать его таковым (т.е. не заморачиваться, как он устроен), то можно просто повеситься на таймер и периодически проверять значение из него. В некоей переменной сохраните старое значение, и по таймеру проверяйте, отличается ли текущее значение в select от сохраненного в переменной. Если да, то делаем действия, соответствующие событию change.
    Ответ написан
    Комментировать
  • Как реализовать код с помошью функций?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Ответ написан
    Комментировать
  • Как правильно написать данную регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если вы хотите именно разобраться, то обратитесь к документации.
    Даже на википедии есть годный материал.
    Ну а вообще - где угодно есть.

    Например, (?<!шаблон) - просмотр назад с отрицанием.
    Ответ написан
  • Как правильно написать регулярку для маски даты?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если есть "вход" и "выход" с промежуточным преобразованием, то лучше приправить кодом. Регулярка - обычно только для поиска/проверки.
    Ответ написан
    Комментировать
  • Как отменить заморозку фоновых вкладок Google Chrome?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Второй браузер.
    Можно лису или также хромовый, благо их много.
    Ответ написан
  • Как проверить пересекает ли элемент другой элемент?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    element.getBoundingClientRect()
    Далее задача сводится к проверке наложения прямоугольников по координатам.
    Ответ написан
  • Как найти подряд идущие значения в массиве?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    С помощью цикла.
    Не знаю, почему в моду вошло написание решений в одну строчку в функциональном стиле, словно это быстрее работает или проще понять при прочтении.
    let cnt = 0; //число совпадений
    for(let i = arr.length-1; i > 0; i--) {
      if (arr[i] == 'значение 2' && arr[i-1] == 'значение 1') cnt++;
    }
    Ответ написан
    5 комментариев
  • Блокировка загрузки скрипта на сайте (как)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если для использования стороннего скрипта B вы согласились на рекламу V, то вы сейчас, получается, хотите обойти соглашение и нарушить условия сделки. Самый правильный путь - договориться иначе (перезаключить другую сделку). Если не удаётся, то уйти к конкурентам и договориться с ними на более выгодных условиях. Если и это не удаётся, то найти альтернативное решение. Ну и железобетонный последний вариант - реализовать подобный функционал самому, что бы это ни было (алгоритм, база, аудитория, информация) - всё можно сделать, собрать, накопить, привлечь, за свои деньги конечно же.

    Заниматься хакерством - не самый правильный путь. Но здесь уже нет рецептов. Вы сами решаете, как именно обмануть партнёра. Решение будет зависеть от деталей, и от того, как именно устроены N, B ,V. Дырки в них могут оказаться такими, что их можно использовать. А если партнёр заранее побеспокоился о своей безопасности, то обход скрипта V так, чтобы использовать B, может обойтись вам дорого (вы потратите много сил и времени, ну или денег, конечно же).
    Ответ написан
    2 комментария
  • Как вернуть setTimeout?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let is_paused = false;
    const timeout = setTimeout(() => {
      if (is_paused) return;
      console.log("timeout!");
    }, 1000);


    Тогда снимать и возвращать таймер можно просто:
    is_paused = true; //снять
    is_paused = false; //вернуть


    А вот это вообще не имеет смысла:
    const fn = () => timeout;
    Потому что timeout - число (номер таймера). Так что fn() всегда будет возвращать некую числовую константу, которую можно получить и так, обращаясь непосредственно к timeout, которая не меняется. То есть timeout - не ссылка на объект таймера, а просто число.

    Возвращаемый идентификатор таймера (timeout) функцией setTimeout нужен только для того, чтобы иметь возможность остановить таймер полностью. Встроенных возможностей ставить на паузу и снова запускать - нет. Можно либо так, как я реализовал выше, через внешнюю переменную, либо каждый раз создавать новый таймер с новым идентификатором (и тогда timeout лучше сделать переменной, а не константой).
    Ответ написан
    5 комментариев
  • Почему return выводит undefined, а консоль результат?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Чтобы функция что-то вернула, где-то в ней должен быть достижимый оператор return с результатом вычислений.

    Когда return условный, как у вас, то он может и не случиться. В этом случае функция выполнит всё, что должна, дойдёт до конца и ничего не вернёт. Точнее, по умолчанию она вернёт undefined.

    Ещё важно, что если функцию вызвать просто так в качестве оператора, то её результат отбрасывается, какой бы он ни был:
    getSum(begin + 1, end, sum);
    В этом примере функция вызывается не как часть выражения, где её результат может быть использован, а сама по себе, как отдельная инструкция. Поэтому её результат нигде не сохраняется, и просто отбрасывается.
    Ответ написан
    4 комментария
  • Можно ли не указывать конкретную папку в пути к картинке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нельзя.
    Но можно все картинки скопировать в одну папку (например, upload), а затем массовой заменой в файлах изменить пути картинок по шаблону (по регулярному выражению).
    Ответ написан
    Комментировать
  • Как заменять слова-цифры на цифры?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Предлагаю выделить опорные слова:
    а) миллион (миллиона, миллионов)
    б) тысяча (тысяч, тусячи, и если другие падежи нужно, то "тысячу" и пр.)
    в) миллиард во всех склонениях
    г) триллион во всех склонениях
    и т.д.

    Далее перед этими опорными словами смотреть уже на как бы множитель. Сам множитель - как бы сумма входящих в него слов.

    Таким образом, один миллион двадцать тысяч семьсот пять раскладывается так:
    (один) * миллион + (двадцать) * тысяч + (семьсот + пять) * 1
    В скобках - множители. Как видно, сами множители являются суммой. И после перемножения с опорной основой, все части складываются воедино. Если основы нет (в конце), то за основу считаем 1, очевидно.

    Другой пример:
    (сто + двадцать + три) * миллиона + (двести + тринадцать) * тысяч + (сто + десять) * 1

    Самих слов не так много. Около десяти опорных (плюс склонения), далее числа от 0 до 19, далее десятки от 20 до 90, далее сотни от 100 до 900, - вот и всё.

    Правда, есть экзотические примеры, типа "пара сотен" или "дюжина". В принципе, они тоже попадают под эту схему, в нее нужно лишь добавить больше опорных слов, а также больше обычных слов. Но вообще это уже выходит за рамки задачи, иначе всякие жаргонизмы тоже нужно забить в схему, что геморно.
    Ответ написан
    Комментировать
  • Как записать данные в ini файл в таком формате?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    [dropChance]
    1 = 0.7
    2 = 0.25
    3 = 0.25
    4 = 0.1
    Ответ написан
    Комментировать
  • Почему js не обработал столкновение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что код плохо написан.
    Из-за этого высока вероятность бага.

    Писать код нужно так, словно завтра его будет проверять человек в 10 раз глупее вас, и по итогам будет начислять вам зарплату. То есть если не поймет, как он устроен, то зарплата, соответственно, ноль. Это позволило бы не только вам самому легко найти или сразу увидеть ошибку, но и показать код другу-программисту.

    На самом деле даже без других людей это правило тоже важно. Потому что вы-сегодня и вы-завтра - это два разных человека. И чем дальше во времени, тем больше разница. Через месяц или, скажем, через полгода вы уже сами не сможете разобраться в своем коде. Что такое x? А что значит aex? Будут примерно такие вопросы. Что делает функция game, за что отвечает? Ведь по названию не понятно, а комментариев нет. Где главный цикл игры? Только после полного прочтения кода и долгих попыток разобраться, удастся понять логику структуры кода, но в таком случае проще заново написать с нуля.

    Вам нужно обратить внимание в первую очередь на:
    • то, как вы называете переменные и функции (нужно осмысленно)
    • наличие комментариев, помогающих понять код


    Начните с этой статьи в Википедии, и если захотите продолжить в том же направлении, то закончите какой-нибудь книгой по теме. Есть много таких книг, достаточно прочитать хотя бы одну. Например, "Совершенный код" (Макконнелл) или "Рефакторинг" (Фаулер).
    Ответ написан
    Комментировать
  • Какой JS фреймворк выбрать для разработки игр?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Ответ написан
    Комментировать
  • Как из строки вычленить и добавить в массив все элементы, перечисленные через запятую?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    array = city.split(',').map(s=>s.trim());

    или короче (но менее красиво и менее надежно):
    array = city.split(', '); //с пробелом
    Ответ написан
    Комментировать
  • Почему в JS взятие остатка от деления -11 на 10 возвращает -1?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что проще всего реализуется в широком диапазоне подходов аппаратного деления и лучше всего способствует многоэтапному делению в длинной арифметике.

    Можете почитать википедию (секцию про программирование), чтобы узнать, как это работает в разных языках программирования. Конкретно в JavaScript знак остатка всегда совпадает со знаком делимого. То есть если делимое - отрицательное число, то и остаток будет отрицательным.
    Ответ написан
    Комментировать
  • Почему не срабатывает if если ввести числа, которые между собой равны?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Кириллица же.

    Скопируйте 20ю строчку сюда, например.
    Ответ написан
    Комментировать
  • Как распарсить правильно URL?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Лучше отделить часть с параметрами, и затем разбить её на части вида key=value.
    Это будет универсальное решение.

    Попроще будет сделать ровно то, что вы запросили: проверить "a" сразу после знака вопроса:
    var text = `<a [routerLink]="['/dashboard/micebot/?a=serv11111121']">/micebot</a>`;
    var m = text.match(/\?a=([a-z1-5]*)/);
    if (m) {
      let a = m[1];
      console.log('"a" существует и равно ', a);
      if (a.length == 12) console.log('Длина "a" ровно 12, не больше');
    }
    Ответ написан
    Комментировать
  • Как отсортировать массив в обратном порядке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно просто через цикл с обращением по индексам в обратном порядке.
    for (let i = arrayWords.length-1; i >= 0; i--) {
      let n = arrayWords[i];
      //..............
    }

    Кстати, а почему вы в такой ситуации использовали map вместо forEach?
    Ответ написан
    1 комментарий