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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Формула: y = 4 - x/2
    (находится с помощью простой школьной математики)
    Это линейная функция. Значит, формула нужна примерно такая:
    y = k * x + b
    Нужно найти k и b по известным x и y. Подставим. Получим систему уравнений:
    2 = k * 4 + b
    2.5 = k * 3 + b
    Вычтем второе из первого:
    -0.5 = k
    Далее находим, что:
    b = 4
    Итоговая формула:
    y = - 0.5 * x + 4

    Соответственно, классическая функция будет выглядеть как-то так:
    function Fn(x) {
      return 4 - x/2;
    }
    Ответ написан
    Комментировать
  • Это стрелочная функция?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нет, это не стрелочная функция.
    Здесь нет стрелок типа такой: =>
    Ответ написан
    Комментировать
  • Почему javascript и php сообщают мне неправильное время?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Документацию по Date.now() читали?

    Метод Date.now() возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

    Гуглим, что такое UTC.

    Соответственно, для date() можно заюзать date_default_timezone_set()
    Ответ написан
    Комментировать
  • Стоит ли хранить ID или объекты?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Лучше так: selectedIDs[id] = true
    Например,
    selectedIDs[1] = true;
    selectedIDs[3] = true;

    Массив выше получится такого вида: [empty, true, empty, true]
    Ответ написан
  • Регистрация функции в глобальную область видимости window js?

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

    Слово "нужно" здесь условно. Вас никто не заставляет пользоваться глобальным пространством, если нравятся другие способы "общения" разных частей кода, а о вкусах не спорят.

    Например, у вас на сайте есть два полностью независимых виджета, и первому для наглядности нужно знать о наличии второго или даже иметь доступ к его возможностям. Сделать это можно как раз через глобальную переменную.

    А вообще писать window.fn = function совсем не обязательно. Достаточно объявить функцию глобально.
    function fn() {
    }
    Ответ написан
    3 комментария
  • Когда лучше использовать рекурсивный setTimeout?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В вашем коде всегда есть ненулевой шанс наличия ошибки (бага).
    • Рекурсивный setTimeout лучше тогда, когда ошибка должна приводить к остановке выполнения кода, то есть к отказу от дальнейших попыток его выполнить.
    • Обычный setInterval лучше тогда, когда код должен продолжать попытки выполниться, не смотря на ошибку.

    В остальном разницы почти нет. Если повторов слишком много, то setInterval предпочтительней, чтобы сократить количество перерегистраций вашей функции.

    Также рекурсивный setTimeout может быть интересен, если величина задержки не является константой, то есть каждый раз будет меняться.
    Ответ написан
    1 комментарий
  • Как правильно обработать запуск расширения google chrome?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала
    "licked_browser_action" не совпадает с "clicked_browser_action"

    Ну а так проверяйте поэтапно. Первым делом, что обработчик вообще срабатывает при каждом клике, то есть нам надо выяснить, даёт ли осечку сам обработчик нажатия или что-то после него. Для этого вставьте что-то типа этого:
    console.log("onClicked");
    Ну и так далее по цепочке. По логам дальше будет видно, где затык.
    Ответ написан
  • Как сложить числа c пробелами jquery?

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если сохранить вашу конструкцию, то как-то так:
    out.innerHTML = "";
    let nums = [1,2,3];
    nums.forEach(function(film) {
        out.innerHTML += film + "<br>";
    });
    Ответ написан
  • Что означает этот синтаксис handleChange = (name) => ({ target }) => {}?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    handleChange = (name) => ({ target }) => {
        this.setState({ [name]: target.value });
    };

    То же, что и:
    handleChange = function(name) {
        return function({ target }) {
            this.setState({ [name]: target.value });
        };
    };

    Или так:
    handleChange = function(name) {
        return function(obj) {
            this.setState({ [name]: obj.target.value });
        };
    };
    Ответ написан
    Комментировать
  • Как заменить все вхождения на различные значения?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Очень просто. Решение «в лоб»:
    1. Разложить число на цифры (в виде массива)
    2. Разложить шаблон на массив кусков (где разделителем будет "#")
    3. Убедиться, что количество цифр и «дырок» - совпадает
    4. Склеить два массива, чередуя элементы (в цикле или нативной функцией)

    Как по мне, никакой из пунктов не может вызвать трудности даже у начинающего программиста.

    P.S. Есть варианты решения лишь с одним массивом или вообще без них.
    Ответ написан
    Комментировать
  • Деобфусцировать js имеющий _0х?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Защита основана на том факте, что дешевле сделать своё собственное решение, чем вскрывать защиту. Так что выбор простой:
    1) Заплатить тому, кто написал оригинальный скрипт.
    2) Заплатить другому, кто может написать такой же скрипт.
    3) Чуть больше заплатить тому, кто снимет защиту.

    Лично я на твоём месте выбрал бы платить меньше, а не больше.
    Ответ написан
    Комментировать
  • Как создать код на javascript?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let is_privet, is_poka //для запоминания результатов поиска
    let arr = document.querySelectorAll("div#asd-container .asd") //места поиска
    if (arr) arr.forEach(div => { //ищем указанные тексты
      if (div.innerText == "Привет") is_privet = true;
      if (div.innerText == "Пока") is_poka = true;
    });
    if (is_privet && is_poka) { //выполняем целевой код
      document.querySelector('[class="btn btn--close"]').click();
    }
    Ответ написан
    1 комментарий
  • Как равномерно размешать строки?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Предлагаю такой простой алгоритм.

    Сначала выясняем, какая строка больше, сравнив length1 и length2. Какая больше, в той и будем растворять.

    Например, путь length1 >= length2 (пример с "hello world"). Тогда посчитаем, сколько символов чередовать: x = Math.round(length1/length2). Далее в цикле берём x символов из исходной строки, затем 1 символ из строки с невидимками. И так до конца, пока строки не кончатся. В цикле склеиваем эти кусочки в результирующую строку.

    Если же length1 < length2, то всё то же самое, только берём 1 символ из исходной и x из строки с невидимками.

    Конечно, если нужно как-то по-особому размазать, то алгоритм нужно будет улучшить немного, но суть будет та же.
    Ответ написан
    6 комментариев
  • Какой алгоритм лучше использовать для нахождения всех перестановок?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сначала считаешь количество "мест" и составляешь массив возможных цифр: 0, 2, 9
    Причём, для каждой цифры также нужно запомнить, сколько её повторять. В данном примере "2" можно повторить дважды.

    Далее в цикле или рекурсией:
    на первом месте может быть 0,2,9
    на втором месте - уже зависит от первого места (если первое 0, то второе - 2,9, а если первое 2, то второе 0,2,9 и т.д.)
    на третьем месте снова выбираешь из оставшихся.
    Вот в таком порядке и сможешь вывести все перестановки.

    Естественно, код приводить не буду, так как вопрос про алгоритм. Осталось написать в виде текста программы. Удачи)
    Ответ написан
    Комментировать
  • Почему н работает переменная в document.getElementById(x)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Как и написано, JS пытается получить свойство getBoundingClientRect у переменной, в которой содержится null.

    Следовательно, document.getElementById('gobl3') === null

    Следовательно, элемента с id "glob3" не существует, он не найден.
    (Конкретный id зависит от номера строки, в которой произошла ошибка).
    Ответ написан
    6 комментариев
  • Как перебрать дочерние элементы внутри цикла forEach?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зачем forEach? Можно как-то так:
    while (el.className !== "parent") el = el.parentNode;
    if (el) { ......
    Ответ написан
  • Chrome extension worker то работает, то нет?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сделай background.js таким:
    try {
      importScripts("bg.js");
    } catch (e) {
      console.error(e);
    }

    А вот bg.js - уже обычный js-файл, перенеси туда все фоновые обработчики, и будет как и на 2-й версии манифеста.
    Ответ написан
  • Как сделать инкремент свойству объекта?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно так:
    obj[key] = (obj[key] || 0) + 1;

    Или так:
    obj[key] ||= 0; obj[key]++;
    Ответ написан
    Комментировать
  • Как можно найти путь к данным вот в этом фрагменте?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если код и связанные с ним переменные спрятаны в замыкании, то к ним нельзя получить доступ из глобального пространства имён. А консоль браузера работает как раз в глобальном пространстве.
    Пример:
    (function() {
      let x = 123; //Нельзя получить доступ извне, т.е. из глобала
      window.onclick = ()=>console.log(x++);
    })();

    Помимо дебаггера можно просто вставить своего "шпиончика" в код:
    x = this;
    Где x - это глобальная переменная. Далее после выполнения кода, ссылка на this останется в переменной x и будет доступна из консоли:
    console.log(x);
    Ответ написан