Задать вопрос
Ответы пользователя по тегу JavaScript
  • Есть один Google SDK, как его подключить?

    Да, ошибка из-за прокси - нужно подключать так, как описано в документации.

    Раз возникает ошибка с CORS - посмотри какие заголовки возвращает imasdk.googleapis.com - там будет понятно.
    https://developer.mozilla.org/ru/docs/Web/HTTP/CORS
    Ответ написан
    Комментировать
  • Как сделать чтобы PHP скрипт по завершении работы отправлял на фронт уведомление?


    Или например при выполнении скрипта на бэке записывать в базу результат а фронт будет через 5 минут спрашивать бэк все ли готово?

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

    Я рекомендую всётаки озадачиться вебсокетами, тк это сейчас наиболее стандартный спобом общения клиента с сервером в реальном времени.

    Без вебсокетов можно попробовать server sent events, но лично я никогда ихне пробовал и не знаю подводных.
    Ответ написан
    Комментировать
  • Замыкания не существует?

    Замыкания есть.
    Только в спецификации это называется "Lexical Environment" (п 8.1)
    https://262.ecma-international.org/10.0/#sec-lexic...
    Вот ещё с MDN:
    https://developer.mozilla.org/en-US/docs/Web/JavaS...
    Ответ написан
    Комментировать
  • Как запарсить дату?

    Чтобы спарсить:
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    Чтобы узнать разницу в годах:
    function yearDiff(dt1, dt2) 
     {
     
      var diffYear =(dt2.getTime() - dt1.getTime()) / 1000;
       diffYear /= (60 * 60 * 24);
      return Math.abs(Math.round(diffYear/365.25));
       
     }
    Ответ написан
    Комментировать
  • Как стилизовать яндекс карту?

    Метки на карте - через кастомные балуны и метки.
    https://yandex.ru/dev/maps/jsbox/2.1/placemark
    https://yandex.ru/dev/maps/jsbox/2.1/balloon_and_hint

    Прозрачную менюшку можно через custom_control сделать: https://yandex.ru/dev/maps/jsbox/2.1/custom_control
    Ответ написан
    2 комментария
  • Что ещё проверять для безопасности?

    Вот эта строка ничего не делает :)
    if(message.length > 150) message.substring(0, 150)

    Конкретно в показанном коде больше никаких уязвимостей не видно.
    Так что только общие советы - открывай OWASP и проверяй всё по порядку для своего приложения.
    Ответ написан
    4 комментария
  • Как сравнить объекты и найти различия?

    Мне кажется, такой вариант вам может подойти:
    function generateJsonPatch(obj1, obj2) {
      const patch = [];
    
      // Рекурсивно обходим все свойства первого объекта
      for (const prop in obj1) {
        if (obj1.hasOwnProperty(prop)) {
          // Если свойство отсутствует во втором объекте, удаляем его
          if (!obj2.hasOwnProperty(prop)) {
            patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
          } else {
            // Если свойство является объектом или массивом, рекурсивно обходим его
            if (typeof obj1[prop] === "object") {
              patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
                p.path = `/${prop}${p.path}`;
                return p;
              }));
            } else {
              // Если значение свойства отличается от значения во втором объекте, обновляем его
              if (obj1[prop] !== obj2[prop]) {
                patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
              }
            }
          }
        }
      }
    
      // Обходим свойства второго объекта, которых нет в первом объекте
      for (const prop in obj2) {
        if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
          // Добавляем новое свойство
          patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
        }
      }
    
      return patch;
    }

    Вот что он выдаёт в вашем случае:
    [ { op: 'replace', path: '/colorQty', value: 1, oldVal: 0 } ]


    Код генерировал не я. Я попросил ChatGPT:
    prompt и оригинальный ответ



    Напиши функцию на javascript, которая принимает в себя два js-объекта или массива, на выходе я должен получить jsonpatch, который можно применить к первому объекту, чтобы получился объект идентичный второму

    ... вариант без oldValue ...

    добавь ещё в каждую операцию jsonpatch и старое значение, чтобы при чтении было понятно, что на что заменяется

    Вот обновлённый код функции generateJsonPatch с добавлением старого значения в каждую операцию jsonpatch:

    function generateJsonPatch(obj1, obj2) {
      const patch = [];
    
      // Рекурсивно обходим все свойства первого объекта
      for (const prop in obj1) {
        if (obj1.hasOwnProperty(prop)) {
          // Если свойство отсутствует во втором объекте, удаляем его
          if (!obj2.hasOwnProperty(prop)) {
            patch.push({op: "remove", path: `/${prop}`, oldVal: obj1[prop]});
          } else {
            // Если свойство является объектом или массивом, рекурсивно обходим его
            if (typeof obj1[prop] === "object") {
              patch.push(...generateJsonPatch(obj1[prop], obj2[prop]).map(p => {
                p.path = `/${prop}${p.path}`;
                return p;
              }));
            } else {
              // Если значение свойства отличается от значения во втором объекте, обновляем его
              if (obj1[prop] !== obj2[prop]) {
                patch.push({op: "replace", path: `/${prop}`, value: obj2[prop], oldVal: obj1[prop]});
              }
            }
          }
        }
      }
    
      // Обходим свойства второго объекта, которых нет в первом объекте
      for (const prop in obj2) {
        if (obj2.hasOwnProperty(prop) && !obj1.hasOwnProperty(prop)) {
          // Добавляем новое свойство
          patch.push({op: "add", path: `/${prop}`, value: obj2[prop], oldVal: undefined});
        }
      }
    
      return patch;
    }


    Каждая операция jsonpatch теперь содержит поле `oldVal`, которое хранит старое значение свойства, которое было изменено. Если свойство было удалено или добавлено, то `oldVal` будет иметь значение `undefined`.

    Пример использования:

    const obj1 = {a: {b: "hello"}, c: [1, 2, 3]};
    const obj2 = {a: {b: "world", d: "foo"}, c: [1, 2, 4, 5], e: "bar"};
    
    const patch = generateJsonPatch(obj1, obj2);
    
    console.log(patch);
    // Output:
    // [
    //   {"op":"replace","path":"/a/b","value":"world","oldVal":"hello"},
    //   {"op":"add","path":"/a/d","value":"foo","oldVal":undefined},
    //   {"op":"remove","path":"/c/2","oldVal":3},
    //   {"op":"add","path":"/c/3","value":5,"oldVal":undefined},
    //   {"op":"add","path":"/e","value":"bar","oldVal":undefined}
    // ]


    Обратите внимание, что поле oldVal в jsonpatch содержит информацию только о тех свойствах, которые были изменены или удалены. Если свойство не было изменено, то его oldVal будет иметь значение undefined.



    PS: сам удивился, на сколько он хорош в подобных задачах. Можно было бы написать и самому, точно также рекурсивно обойдя объекты, но эта шняга сэкономила достаточно много времени.
    Ответ написан
    3 комментария
  • Как перевести значение "1 день" в секунды? А еще как перевести значение "1 день" например в 19.05.2023 1:42?

    Простейшая арифметика из третьего класса школы + немного гуглежа по поводу работы со временем в js.
    function getTimerEndFromNow(prompt) {
     return getTimerEndFrom(new Date(), prompt);
    }
    
    function getTimerEndFrom(start, prompt) {
      return new Date(start.valueOf() + getSecondsByPrompt(prompt) * 1000);
    }
    
    function getSecondsByPrompt(prompt) {
      const [count, measure] = prompt.split(' ');
      return count * getSecondsByMeasure(measure);
    }
    
    function getSecondsByMeasure(measure) {
      switch(measure.toLowerCase()) {
        case 'день': return 60 * 60 * 24;
        case 'час': return 60 * 60;
        case 'минута': return 60;
        default: throw new Error(`Unknown measure ${measure}`);
      }
    }


    С ЭТИМ БЛИН ДАЖЕ БЕСПЛАТНЫЙ БОТ НА ОСНОВЕ GPT СПРАВЛЯЕТСЯ

    Запрос:

    /gpt
    Мне нужно перевести значение "1 день"/"1 час"/"1 минута" в секунды для таймера. А точнее функция, но я вообще не знаю как это сделать. И еще одну функцию для того что бы например таймер получил сегодня а пишется во сколько он закончится, точнее например в 19.05.2023 1:42

    Напиши функции на js

    Ответ:

    Для перевода "1 день"/"1 час"/"1 минута" в секунды можно использовать следующую функцию:

    function convertToSeconds(time) {
      const timeArr = time.split(' ');
      const value = parseInt(timeArr[0]);
      const unit = timeArr[1];
    
      switch (unit) {
        case 'день':
          return value * 24 * 60 * 60;
        case 'час':
          return value * 60 * 60;
        case 'минута':
          return value * 60;
        default:
          return 0;
      }
    }


    Пример использования:

    const secondsInDay = convertToSeconds('1 день'); // 86400
    const secondsInHour = convertToSeconds('1 час'); // 3600
    const secondsInMinute = convertToSeconds('1 минута'); // 60


    Для форматирования даты в строку можно использовать объект `Date` и методы `getFullYear()`, `getMonth()`, `getDate()`, `getHours()`, `getMinutes()`, `getSeconds()`:

    function formatDate(date) {
      const year = date.getFullYear();
      const month = addLeadingZero(date.getMonth() + 1);
      const day = addLeadingZero(date.getDate());
      const hours = addLeadingZero(date.getHours());
      const minutes = addLeadingZero(date.getMinutes());
      const seconds = addLeadingZero(date.getSeconds());
    
      return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;
    }
    
    function addLeadingZero(value) {
      return value < 10 ? '0' + value : value;
    }


    Пример использования:

    const endDate = new Date(2023, 4, 19, 1, 42, 0);
    const formattedDate = formatDate(endDate); // '19.05.2023 01:42:00'


    Ответ написан
    7 комментариев
  • Почему этот простой JS код в React-е не работает?

    ChatGPT-программисты... (с) Mikhail Osher

    Тебе нужно обрабатывать клик и отслеживать состояние внутри компонента:
    import React, { Component } from 'react';
    import styles from './Header.module.scss'
    
    const Header = () => {
      const [active, setActive] = useState(false);
      const onAccordionClicked = () => setActive(!active);
    
      return (
                <header className={styles}>
                    <div>
                        Hounter
                    </div>
                    <nav>
                        <ul>
                            <li style={{width: '96px'}}>About Us</li>
                            <li style={{width: '78px'}}>Article</li>
                            <li id='li_btn' style={{width: '122px'}}
                                 className={styles.accordion + active ? styles.active : ""}
                                 onClick={onAccordionClicked}>
                                Property 
                                <a className={styles.panel} href='#'>House</a>
                                <a className={styles.panel} href='#'>Villa</a>
                                <a className={styles.panel} href='#'>Appartment</a>
                            </li>
                        </ul>
                        <button className={styles.btn}>Sign Up!</button>
                    </nav>
                </header>
            );
    };
    
    export default Header;
    Ответ написан
    Комментировать
  • Как взять контекстное меню в телеграмме?

    Есть две реализации телеграма в браузере:
    Z: https://github.com/Ajaxy/telegram-tt
    K: https://github.com/morethanwords/tweb

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

    Можно попробовать добавлять при помощи расширения какой-нибудь новый блок в DOM. и при помощи js на сайте проверять его наличией.
    Ответ написан
  • Как запустить файл в replit с помощью бота?

    Почему бы не запускать код в изолированном контейнере на той же машине, где и бот работает?
    replit точно не предназначен для решения вашей задачи.
    Ответ написан
    Комментировать
  • Docker в Windows, Linux переводы строк, как правильно?

    Вариант раз: писать логи в stdout и пусть сам Docker или какой-нибудь vector их перенаправит куда следует в нужном формате.

    Вариант два: Забить и настроить инструмент, который читает файлы на винде так, чтобы он LF считал за нормальный перенос строки.
    Ответ написан
    Комментировать
  • Как сделать запрос к такому JSON файлу?

    Перебирай в цикле каждый элемент, пока не найдёшь элемент с искомым id - из него и бери amount
    Ответ написан
    Комментировать
  • Как настроить время в vscode?

    Время правильное. На это даже буква Z в конце метки времени намекает, что это время по Гринвичу.

    Вот несколько вариантов, как можно вывести в нужном часовом поясе:
    https://stackoverflow.com/questions/17415579/how-t...
    Ответ написан
    8 комментариев
  • Как получить ключ c google authenticator?

    Логично, что нужно просто загуглить библиотеки для totp для js:
    https://www.npmjs.com/package/otplib
    Ответ написан
    Комментировать
  • Как записать информацию в json внутри приложения Vue.js?

    Что сериализации/десериализации json используются функции JSON.stringify и JSON.parse.

    Если тебе нужно сохранить файл на том же компьютере, на котором открыт сайт, то ты можешь использовать два варианта:
    1. FileSystem API (достаточно сложно на самом деле. Я не буду давать пример его использования)
    2. Использовать хак с невидимой ссылкой на скачивание.
    const obj = { "hello": "world"};
    const fileText = JSON.stringify(obj);
    const fileName = "example.json";
    
    const pom = document.createElement('a');
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(fileText));
    pom.setAttribute('download', fileName);
    if (document.createEvent) {
      var event = document.createEvent('MouseEvents');
      event.initEvent('click', true, true);
      pom.dispatchEvent(event);
    }
    else {
      pom.click();
    }


    Для чтения файла можно использовать FileReader:
    https://itchief.ru/javascript/filereader
    Ответ написан
    Комментировать
  • Что такое multiple в рамках AJAX запроса?

    Работаю с бэкендом. От туда комментарий:

    Во первых - почему бы у коллег прямо не спросить раз у них в документации примеров нет?

    А во вторых есть ещё варианты:
    Раз: site.ru/?par1=1&par1=2&par1=3
    Два: site.ru/?par1[]=1&par1[]=2

    Вообще из-за того что HTTP никак не стандартизирован способ передачи списка параметров - каждый велосипедит что хочет.
    Ответ написан
    3 комментария
  • Как сделать POST запрос с использованием JS внутри PDF файла?

    Из-за того что отправка HTTP запросов из документа - очевидная уязвимость, большинство pdf-ридеров тупо запрещает такие запросы.
    (Иногда разрешает с разрешения пользователя. Иногда разрешает к доверенным сайтам)

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

    Вот кстати аналогичный вопрос с SO:
    https://stackoverflow.com/questions/53310315/send-...
    Ответ написан
    Комментировать