Задать вопрос
  • Jquery клик по одному классу отдает одно и тоже?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const bk = $(this).text();
    Ответ написан
    Комментировать
  • Как решить задачу по Python?

    Вместо and надо or
    Ответ написан
    Комментировать
  • Отличия GET от POST?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Общение веб-браузера c сервером по протоколу HTTP напоминает обычный текстовый чат. Никакой магии.

    Браузер устанавливает соединение с сервером и пишет ему текстом, как будто, «Привет, как дела».
    Веб сервер в ответ что-то возвращает, типа «Ничего так, пойдёт».

    Настоящий диалог строго регламентирован протоколом. Первая строчка, которую должен прислать браузер содержит название метода, адрес и версию протокола:GET /about/index.html HTTP/1.1

    Ну, или POST /guestbook HTTP/1.1. Или ещё какой-то из методов и адресов.

    Вы можете подключиться к веб-серверу обычным telnet'ом по 80-му порту, если найдёте веб-сервер, позволяющий подключаться без SSL (без https://), и попробовать вообще вручную вводить все эти строки, изображая браузер.

    Таким образом, различие методов GET и POST — целиком зависит от веб-сервера. Существует стандарт, описывающий все ньюансы. Рекомендации, которых лучше придерживаться. Но в конечном счёте это всего лишь чат )
    Ответ написан
    Комментировать
  • Почему инициализация суммы в цикле while равна 1?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Функция умножает числа в цикле от start до finish.

    Так как это умножение, начальное значение не может быть 0, иначе результат всегда будет 0.

    По-хорошему, первым значением можно брать сразу первое число start и домножать, начиная со следующего start + 1:
    const multiplyNumbersInRange = (start, finish) => {
      let result = start;
      let i = start + 1;
    
      while (i <= finish) {
        result *= i;
        i += 1;
      }
      return result;
    };
    
    multiplyNumbersInRange(1, 3); // 1 * 2 * 3 = 6

    Надо определиться с крайними случаями: какой должен быть результат, когда в «умножении» участвует только одно число? (когда start === finish)
    Ответ написан
    1 комментарий
  • Как получить данные из функции(метода) после выполнения промиса?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Решите сначала упрощенную изолированную проблему (для себя)
    function getValue() {
      return new Promise(resolve => setTimeout(() => resolve(123), 2000))
        .then(data => data * 2);
    }
    Как вы получите значение 246 из этой функции «в переменную»?

    Когда разберётесь, скорее всего, разрешится и весь прочий «порочный круг асинхронности».
    Ответ написан
    Комментировать
  • Как связать кнопку с соответствующим объектом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    можно, например, кнопки не писать в разметке, а создавать программно. Для кнопки нужны только название и имя картинки, а в остальном они одинаковы. Ну ещё активная кнопка получает 2 доп. CSS класса.

    Для отрисовки достаточно объекта типа
    spoiler
    const categories = {
      mass: 'Масса',
      distance: 'Расстояние',
      temperature: 'Температура',
      time: 'Время',
      speed: 'Скорость',
      currency: 'Валюта',
    };


    Там же, где создаются кнопки и вешается на них слушатель клика, можно их складывать в массив. И вот у вас массив элементов. Ещё каждой категории понадобятся данные с единицами измерения. Поэтому центральный объект данных можно примерно так представить:
    spoiler
    const categories = {
      mass: { title: 'Масса', element: null, data: null, },
      distance: { title: 'Расстояние', element: null, data: null, },
      temperature: { title: 'Температура', element: null, data: null, },
      time: { title: 'Время', element: null, data: null, },
      speed: { title: 'Скорость', element: null, data: null, },
      currency: { title: 'Валюта', element: null, data: null, },
    };
    В поле element пойдёт созданный HTML-элемент кнопки, а в поле data – что там сейчас в переменной mass у вас.

    Клик по объекту вешать сразу с этим же текущим объектом всех-данных:
    Object.entries(categories).forEach(([ name, item ]) => {
      const el = document.createElement('div'); // это внешний div кнопки
      // el.classList.add(...)
      el.insertAdjacentHTML('beforeend', `
        <p class="value-item__title">${item.title}</p>
          <img src="assets/img/values/${name}.svg" alt="" class="svg-icon value-item__img">
      `);
      el.addEventListener('click', () => clickHandler(name));
      // по этому name можно вытащить categories[name]
    
      divValues.appendChild(el);
    });
    Ответ написан
    1 комментарий
  • Почему возникает ошибка "Uncaught TypeError: Cannot read properties of null"?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в первой строчке причина:
    const select = document.querySelector('select'); // элемент не находится, в константе NULL
    Ответ написан
    Комментировать
  • Как можно запретить ставить два знака (например: + и -) подряд?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    мне не нравится, как тут сделано – что в самих элементах прописано действие onclick="calc.txt.value+=
    Лучше бы разделить три части:
    1. действия пользователя (нажатые кнопки)
    2. обработку очередной поступившей команды
    3. отображение на дисплее


    Переделайте, чтобы вместо этой добавки прямо в значение txt.value, кнопки вызывали общую функцию: onclick="clicked('*')". И напшите эту функцию, которая на вход получает символ, и дальше решает, что с ним делать. Например, сначала берёт существующее значение txt.value, смотрит на его последний символ, и либо добавляет, либо заменяет его.

    Иллюстрация идеи:
    Ответ написан
    Комментировать
  • Как восстановить класс, элементу по умолчанию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    По наезду мышки всем гасить, текущему давать .active;
    По уезду мышки всем гасить, первому давать .active.

    Ответ написан
    Комментировать
  • Как выбрать все кнопки с одним классом и сделать открытие/закрытие контента?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    только на первую кнопку
    ...
    querySelector
    querySelector() находит и отдаёт первый элемент, подходящий селектору. Остальные остаются вне игры.

    Зато querySelectorAll() выберет все подходящие. Но потом коллекцию (NodeList) надо обходить циклом. Например,
    querySelectorAll(...).forEach(item => что-то-сделать-с-item)
    .

    Альтернатива — слушать клики выше в дереве, в общем родителе. Проверять, что кликнули именно button.btn-more, дальше исходя из этой кнопки находить в DOM-дереве ближайшие элементы, которым надо менять классы. Делегирование событий.
    Ответ написан
    Комментировать
  • Как правильно изменить поведение функции?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Всем убрать, этому добавить
    const ACTIVE = 'active';
    
    o(".main-navigation > ul > li").on('click', function() {
      o(".main-navigation > ul > li").removeClass(ACTIVE);
      o(this).addClass(ACTIVE);
    });
    Ответ написан
    4 комментария
  • Как сделать скрипт, который будет спрашивать букву, искать её в строке и заменять её символом, если она есть?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно в ещё одном цикле искать очередную позицию угаданной буквы через indexOf и конструировать новую строку, заменяя подчёркивание в этой позиции на букву.
    spoiler
    game:
    while (true) {
      const Game = {
        countAttempts: 0,
        wordsList: ['javascript', 'python', 'computer', 'aboba'], //слова, которые надо отгадывать
        badLetters: [], //буквы, которые не были найдены в слове
        rndWordChoice: function () {
          //рандомайзер для выбора слова
          return this.wordsList[Math.floor(Math.random() * this.wordsList.length)];
        },
      };
    
      let word = Game.rndWordChoice();
    
      let underlineWord = '_'.repeat(word.length);
      
      round:
      while (true) {
        alert(`Угадайте слово - ${underlineWord}\nБукв в слове - ${underlineWord.length}\nНеудачных попыток - ${Game.badLetters.length}`)
        const userInput = prompt('Введите букву:');
        if (userInput == null) break game;
        if (userInput.length !== 1) {
          alert('Нужна ровно 1 буква');
          continue;
        }
        const letter =  userInput.toLocaleLowerCase();
        if (word.includes(letter)) {
          let index = word.indexOf(letter);
          while (index > -1) {
            underlineWord = underlineWord.substring(0, index) + letter + underlineWord.substring(index + 1);
            index = word.indexOf(letter, index + 1);
          }
        } else {
          Game.badLetters.push(letter);
        }
      }
    }
    Случайный выбор слова заменил на однострочник.

    Но вся идея реализации и модель данных че-т так-себе. Мелкие алёрты треш.
    Ответ написан
    4 комментария
  • Как сделать так, чтобы при выборе какого-то события из списка, менялся код таймера (сколько остается дней до этого события)?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Событие == timestamp (целое число), до которого считается обратный отсчёт. И название.

    Всё остальное — одно и общее для всех случаев.

    Таймер каждую секунду только обновляет разницу от «сейчас» до того timestamp'а, и показывает её.

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

    Ответ написан
    Комментировать
  • Как одновременно запустить 1500 ботов, выполняющих http запросы?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Если с PHP, то я бы делал это в Swoole: там и свои таблицы-в-памяти, и корутины, чтобы «сон» не тормозил остальных, — и вообще полезный опыт.

    P.S. не надо заниматься спамом, накрутками и прочим абьюзерством!
    Ответ написан
    2 комментария
  • Почему в результате получается объект?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const TickersArray = []
    
    const getData = url => fetch(url).then(response => response.json());
    
    const getKlines = async ticker => {
      const commits = await getData(`https://fapi.binance.com/fapi/v1/klines?symbol=${ticker}&interval=1m&limit=499`);
      // console.log(commits);
      TickersArray.push(ticker);
      return TickersArray;
    };
    
    const getTickers = async url => {
      const contentCoins = await getData(url);
    
      contentCoins.forEach(x => {
        const { symbol } = x;
        if (symbol.includes('USDT') && !symbol.includes('_')) {
          // getKlines(symbol);
          TickersArray.push(symbol);
        }
      });
      return TickersArray;
    };
    
    getTickers('https://fapi.binance.com/fapi/v1/ticker/price').then(arr => {
      console.log(arr === TickersArray, TickersArray);
    });
    Ответ написан
    1 комментарий
  • Как использовать имеющуюся авторизацию для обращения к стороннему сайту?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    смотрите DevTools браузера, как там выполняются эти запросы.

    Разберитесь, как устроена авторизация: куками, доп. заголовком запроса. Попробуйте вытащить запрос и успешно выполнить его в приватной вкладке браузера (где юзер не авторизован). Тот же FireFox во вкладке Network предлагает "Copy as Fetch".

    Ещё вопрос, как долго «живёт» такая авторизация. Час, сутки, неделю, год?

    Самый неудобный вариант – что придётся менеджерам каждый раз логиниться во Vue приложении, выполнять запрос и копировать его из DevTools в ваше приложение – которое сумеет вытащить из скопированного куку или там ключ для дальнейших своих запросов.
    Ответ написан
    Комментировать
  • Почему игнорируется !isNaN?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    isNaN() проверяет, что аргумент — это NaN – специальное значение НеЧисло ("NaN" = "Not a Number")

    Вам же, наоборот, нужно убедиться что аргумент — именно число:
    Object.values(
      { "Vasiliy": 100, "Piotr": "300", "Daria": 250, isPaid: false }
    )
      .map(parseFloat) // что можно – преобразовать в число, или NaN
      .filter(value => !isNaN(value)) // отсеить NaN, оставить только числа
      .reduce((acc, c) => acc + c) // суммировать
    // 650
    Ответ написан
  • Как платить только за используемые ресурсы сервера?

    Чуть ближе к ожидаемой «облачной экономии» — Serverless — бессерверные облачные функции.

    Там платишь только за время отрабатывания функции. Включая её «разгон» – если требуется там что-то развернуть/установить/настроить долгое. В функцию хорошо упаковывать тяжёлые небыстрые задачи. Например, компрессии загруженного видео файла; парсинга данных; отправки сообщений.

    Нет запросов – нет оплаты.

    Примеры:
    Ответ написан
  • Как из двух массивов получить те объекты, которые есть в одном и отсутствуют в другом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Составить массив id, которые нужно исключить
    const excludeIds = defaultCass.map(item => item.id);


    Затем отфильтровать, оставив только те, чей id отсутствует в excludeIds
    const result = allCass.filter(item => !excludeIds.includes(item.id));
    Ответ написан
    Комментировать
  • Как распарсить возвращаемые данные JSON?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    см. формат ответа в документации
    -.then(response => response.text())
    -.then(result => console.log(result))
    +.then(response => response.json())
    +.then(({ location }) => {
    +  if (!location) return; // не нашлось
    +  const { data } = location;
    +  const { country, region_with_type, city_with_type } = data;
    +  // теперь их куда-то вставить в разметку
    +})
    Ответ написан