Задать вопрос
  • В чем ошибка в цикле вывода четных чисел?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. for (let i = 0; i < 50; ...
      от 0 и до, но не включая, 50. Поменяйте 0 и < 50, чтобы это исправить.
    2. out += i + ' ';  // добавляется всегда, в любом случае
      if ( i % 2 != 0) continue; // проверка уже потом
      поменяйте порядок: сначала проверка, потом добавление
    3. document.querySelector('.out-2').innerHTML = out;
      срабатывает в каждой итерации цикла. А надо 1 раз, когда цикл отыграл все повторы. Вынесите эту строку из цикла.


    spoiler

    2..50 через один, по чётным — это 2 * (1..25) подряд.
    document.querySelector('.b-2').addEventListener('click', () => {
      document.querySelector('.out-2').innerText = Array(25) // создали массив из 25 пустых слотов
        .fill() // заполнили их undefined, чтобы можно было..
        .map((n, i) => 2 * (i + 1)) // каждый заменить на (его индекс + 1) * 2
        .join(' '); // и склеить в строку через пробел
    })
    все эти методы массива можно посмотреть на MDN.


    Ответ написан
    1 комментарий
  • Что означает такой ответ сети?

    При классификации размерность выхода обычно равна числу классов.
    1 из 3 действий == 3 «нейрона».

    На каждом некое значение от 0 до 1 — вероятности. Брать вариант с наибольшей вероятностью.
    Ответ написан
    Комментировать
  • Какой лучше онлайн-фоторедактор?

    Крутейший профессиональный Adobe Lightroom – оказывается уже и онлайн и попробовать бесплатно можно.
    Ответ написан
    Комментировать
  • Как создать функцию/переменную с проверкой, что они еще не созданы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    чтобы не раздувать файл, решил вынести общие функции и переменные в отдельный файл

    Ну вот практически уже используете модули, но ещё не совсем. Раз там какие-то переменные хранятся, значит для каждого калькулятора, видимо, нужна своя _копия_ этого общего куска.

    Как вариант, оберните всё, что там общего, в класс или функцию или объект и создавайте для каждого калькулятора новую копию.

    calc_init.js?1 не удачная идея. Именно потому, что возникают описанные в вопросе проблемы.
    Лучше один раз его просто загрузить <script src="calc_init.js"></script>. Пусть там просто определяется единственная
    функция
    function calc_init(n, id) {
      let el_script = document.createElement("script");
      el_script.src = `/scripts/script_${n}.js`;
      el_script.setAttribute('defer', '');
      document.body.appendChild(el_script);
    
      let el_div = document.createElement("div");
      el_div.setAttribute('id', id);
      document.body.appendChild(el_div);
    }
    и потом вызывать его функцию:
    calc_init(1, 'id_calc_1'); // номер калькулятора и id HTML-элемента, куда его впихнуть
    calc_init(3, 'id_calc_3');
    Ответ написан
  • Как сложить числа из 2 функций?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Продумайте, в какой момент что происходит. Какие есть события.

    Из каждой функции обновляйте значение переменной и отображайте сумму переменных:
    var price_pech = 0;
    var price_idosn = 0;
    
    //... 
    function MyFunction(sum) {
      price_pech = sum;
      $("#total_price").text(price_pech + price_idosn);
    }
    Ответ написан
    4 комментария
  • Как отследить событие работающего таймера?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в clearText() выполнять timer.innerHTML = 0;

    Вообще не айс держать в разметке значения. Лучше в какой-то переменной хранить число, и по таймеру его отображать в div:

    Таймеры в JS далеко не идеально точны. Если вкладка браузера перестаёт быть активной, таймеры в ней станут реже тикать. Поэтому не считайте setInterval(func, 1000) идеальной секундной стрелкой.

    Если важна точность, лучше запоминать момент времени const D = new Date(); и по таймеру брать текущее время и считать разницу с тем моментом: let seconds = Math.round((new Date() - D) / 1000)

    Событие таймера при этом можно вызывать чаще, чем раз в секунду: скажем, раз в 200 мс.
    Ответ написан
    Комментировать
  • Как сделать поиск нескольких div с id через textarea?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вот для старта:
    дальше сами.

    id через пробел или запятую.
    $('#search').on('input', function(){ // При вводе текста..
      $('.table-item.-active').removeClass('-active'); // убираем класс .-active у .block.-active
      const ids = $(this).val().split(/[ ,]/).filter(el => el.length);
      for (let id of ids) {
    	  $(`.table-item[id="${id}"]`) // берём блок у которого есть совпадение по id
          .addClass('-active'); // выдаём ему класс .-active
      }
    });
    Ответ написан
    2 комментария
  • Как в js указать все числа находящиеся в определенном диапазоне?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В JS есть клевая штука: генераторы.
    Чтобы не забивать сразу память всеми значениями (что, если понадобится от 1 до 1050), можно их получать по одному:
    // эта функция - Генератор. Он создаёт итерируемые штуки
    function* makeRangeIterator(start = 0, end = 100, step = 1) {
        let iterationCount = 0;
        for (let i = start; i < end; i += step) {
            iterationCount++;
            yield i;
        }
        return iterationCount;
    }
    
    // вот сделаем итератор от 1 и до 10 (исключая конец)
    var r1_10 = makeRangeIterator(1, 10);
    
    // в цикле получим из итератора значения
    for (i of r1_10) {
      console.log(i); // выведет от 1 до 9
    }
    Ответ написан
    Комментировать
  • Как нарезать видеозвонок, из вертикали в горизонталь?

    можно это сделать и через ffmpeg в один проход
    разбить вход split на два видео потока,
    в одном вырезать crop верхнюю часть
    в другом так же вырезать нижнюю часть
    соединить их горизонтально через hstack (у обоих должна быть одинаковая высота).
    Звук просто копируется со входа.

    Не совсем ваш случай, но для понимания: пример.
    Ответ написан
    1 комментарий
  • Как решить эту математическую задачу?

    похоже, а < 0,
    значит, вычитание из b отрицательного а только увеличит значение.

    По условию b и так больше 2.
    Ответ написан
    Комментировать
  • Как избежать блокирования окружности другими окружностями?

    Чтобы не пересекались, один из вариантов — включить «физику» и при наложении пары окружностей, двигать их как будто их центры отталкиваются, пока они не перестанут пересекаться.

    Для определения, не заперта ли, можно пытаться проложить маршрут, и если он невозможен, значит, заперли.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Хорошие решения приходят в голову при чтении документации. Например, метод строки split() в качестве разделителя может принимать не только строку, а и регулярное выражение.

    Логика вашего скрипта: разбить текст по пробелу ИЛИ запятой ИЛИ точке. Регулярка для этого - группа символов в квадратных скобках: /[ ,.]/ — будет соответствовать пробелу или запятой или точке.

    Подвох в том, что могут получаться пустые строки как элементы массива. Например, из "test one." получится ["test", "one", ""] Поэтому стоит пройтись по массиву, оставив в нём только строки ненулевой длины: arr.filter(w => w.length > 0)

    Ну и взять длину полученного массива.
    Ответ написан
    Комментировать
  • Влияет ли цикл requestAnimationFrame на скорость воспроизведения анимации?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    разная частота вызовов функции в requestAnimationFrame() – зависит от устройства, активности/неактивности вкладки и др.

    Но в вашу функцию параметром при вызове передаётся время, прошедшее с некого момента старта, первого вызова. И положение куба стоит расчитывать исходя не из числа вызовов функции, а только исходя из времени.

    Так анимация в разных условиях будет иметь идентичную скорость перемещения куба, хоть и с разной частотой кадров: где-то плавнее, где-то скачками, но, например, коснётся пола он одновременно на всех устройствах.
    Ответ написан
    Комментировать
  • Как ускорить while loop?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    includes() и indexOf() каждый раз, считайте, пробегают, в среднем, по полстроки.
    Представьте, что там дико длинные строки, гигабайтные.
    Поэтому алгоритм желательно построить так, чтобы по каждой Войне и Миру пройтись 1 раз или меньше.

    Условие хорошо сужает возможные символы до всего 26 букв латинского алфавита a..z

    Рабочее решение под
    спойлером

    Например, можно создать массив из 26 счётчиков и заполнять их из первой строки и опустошать из второй.
    Вот такое моё решение прошло тест:
    function scramble(str1, str2) {
      if (str1.length < str2.length) return false;
      const a = Array(26).fill(0);
      for (let c of str1) a[c.charCodeAt(0) - 97]++;
      for (let c of str2) a[c.charCodeAt(0) - 97]--;
      for (let n of a) if (n < 0) return false;
      return true;
    }
    * 97 это ASCII-код маленькой латинской "a"
    Ответ написан
    Комментировать
  • Как записать в одномерный массив все элементы из многомерного?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ошибка в том, что возвращается всегда массив.
    В т.ч. там, где вроде бы хотели массив распаковать.
    Ответ написан
    Комментировать
  • Как найти координаты точек на дуге зная координаты точек хорды?

    1. найти координаты центра (центр может быть как по одну, так и по другую сторону отрезка)
    2. найти угол от оси X к точке А
    3. найти угол от оси X к точке B
    4. найти угол от оси X к искомой точке на дуге.
      Длина дуги пропорциональна углу. Поэтому 1/2 длины находится на 1/2 угла: угол_к_В + (угол_к_А - угол_к_В) / 2
    5. найти координаты точки, исходя из центра, угла и радиуса


    картинка
    5ee5da3a004ae356565895.png
    Ответ написан
    Комментировать
  • Создал 4096 ветвей дерева из циклов for → for → for ... и т.д.. Как их теперь найти?

    Вычесть 1 из значений, чтобы вместо 1 и 2 стали 0 и 1, и, поздравляю, вы изобрели двоичную систему исчисления и записали ей подряд числа от 0 до 2^12 – 1
    Ответ написан
    4 комментария
  • Очередь запросов в websocket?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно проверять длину буфера:
    // every 100ms examine the socket and send more data
    // only if all the existing data was sent out
    setInterval(() => {
      if (socket.bufferedAmount == 0) {
        socket.send(moreData());
      }
    }, 100);

    Вариант — сделать свою обёртку над буфером отправки. Чтобы в буфере самого WS было максимум одно сообщение, а остальные ждали в _вашей_ очереди, над которой вы полный хозяин.
    Ответ написан
    1 комментарий
  • Как работать с большими массивами на php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Чтобы не в памяти, можно на диск. Сохранить массив чисел в файл. Для компактности как бинарный файл, по 4 байта на число pack() (если это 32-битные id ВКонтакте вы сравниваете. Facebook id — лонги). Отсортированным. Тот же ВК умеет отдавать список сортированным. Сохранить так же второй.

    Открыть оба файла, считать fread($fh, 4) из каждого по числу: число А, число Б.
    А больше Б ? Читаем новый Б.
    Б больше А ? Читаем новый А.
    Равны? Ура, это число сохраняем в «пересечение». Читаем новый А и новый Б.
    Закончился один из файлов — пересечений больше нет.
    Ответ написан
    Комментировать
  • Как установить Mac os на MacBook aluminium 2008?

    для начала сбросьте настройки: при запуске Cmd + Opt + P + R

    После этого попробуйте снова с флешами и установочными CD.

    См. все комбинации клавиш при запуске Мака
    Ответ написан