Задать вопрос
  • Как получить массив дат со следующими пятью днями?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Array(5) // длина массива
      .fill()
      .map((_, i) => {
        const D = new Date();
        D.setDate(D.getDate() + i);
        return D;
      })
    вернет требуемый массив дат
    Ответ написан
    1 комментарий
  • Какой функцией декодировать эту строку - чтобы русские буквы получились?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    toString() прекрасно сделает работёнку: грязно и дёшево )

    (
      "\u042d\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0442\u043e\u0440\u044b \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u0444\u0438\u0433\u043d\u0451\u0439 \u0437\u0432\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0431\u043e\u0433 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c"
    ).toString()  // "Это текст которы ..."

    по сути, тут и делать ничего не надо — это просто разные способы записать одну и ту же строку.

    Как число можно записать, например, и 1000 и 1e3 и 0x3E8,
    так и букву, например, можно записать несколькими способами: "ё", "\u0451".
    «В памяти» в итоге окажется одно и то же значение.
    Ответ написан
    Комментировать
  • Как найти в массиве, элементы другого массива и узнать их положение?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const alpha = 'abcdefghijklmnopqrstuvwxyz'.split(''); // массив ["a", ... "z"]
    
    'pavel'.toLowerCase().split('').map((c) => alpha.indexOf(c)) 
    // [ 15, 0, 21, 4, 11 ]

    Если не требуется перемешанный алфавит, а годится в стандартном порядке a..z то можно использовать UTF таблицу, где латиница с маленькой буквы начинается с 97 (совпадает с ASCII):
    'pavel'.toLowerCase().split('').map((c) => c.charCodeAt(0) - 97)
    // [ 15, 0, 21, 4, 11 ]
    Ответ написан
    Комментировать
  • AddEventlistener и oninput, как выкрутиться, если надо удалить и проверить на наличие одновременно?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Слушателей события повесить только один раз, сразу.

    Добавить переменную типа let isActive = false; – флаг состояния: активно или нет. Как сейчас у вас наличие/отсутствие слушателя.
    По событию blur – ставить в false, input или focus – ставить true.
    Не повторять себя – обновление значения innerHTML = Math.round() сейчас дважды. Достаточно явно вызвать функцию.
    Лучше не использовать подчёркивание в названиях переменных / функций, это не наш стиль )
    Ответ написан
    2 комментария
  • Как развернуть локально всю экосистему если дали доступ к vps на которой все в докере?

    Смотрите внимательно файлы в git репо: может, там есть что-то типа README.md с инструкцией по развёртыванию? Прямо копировать запущенный проект с VPS'ки — затея так-себе.

    Есть адский способ: скопировать всю папку /var/lib/docker
    версии докера, конфиги, пути, папки на серверах должны быть идентичными;
    сервис докера надо предварительно остановить;
    при переносе сохранить права и владельцев папок-файлов;
    Ответ написан
  • Задачка на массивы и циклы JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Лучше, наверное, без временного массива, по-честному in-place:
    берёшь пару элементов и меняешь их местами.
    • Первый с последним.
    • Второй с предпоследним.
    • ?????
    • Profit!
    В цикле придётся пройти всего пол-массива.
    синтакс

    Современный синтакс позволяет менять местами два элемента без временной переменной:
    // a и b взаимно обменялись значениями:
    [ a, b ] = [ b, a ];
    
    
    const arr = [1, 2, 3, 4, 5];
    [arr[0], arr[4]] = [arr[4], arr[0]];
    arr // [5, 2, 3, 4, 1]

    Ответ написан
    2 комментария
  • Как добавить массив на страницу?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    раз есть массив, и для каждого элемента нужно получить на выходе карточку, нужна функция:
    на вход элемент массива, на выходе – карточка.

    И тогда
    initialCards.forEach(item => {
      // создать карточку
      const element = makeElementFromItem(item);
    
      // установить эту карточку куда-то в DOM-дереве
      document.body.appendChild(element);
    });
    Вам осталось реализовать функцию makeElementFromItem() — но там в начале у вас уже есть все эти createElement() – думаю, вы справитесь.
    Ответ написан
    Комментировать
  • Как вытащить число из десятичной дроби?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Если на входе не числа, а строки, то можно регуляркой заменить ноль-точку-нули в начале на пустую строку:
    '0.0000001024'.replace(/^0?\.?0*/, '') // получится строка "1024"


    upd. т.к. числа даются именно как числа, вместо 0.0000001024 после преобразования toString() мы увидим "1.024e-7"
    Решение то же по смыслу, но брать всё до "e" и убирать точку
    Ответ написан
    Комментировать
  • Как экспортировать return функции которая внутри функции?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Может как-то так
    const selectTrack = new Promise(resolve => {
      document.querySelectorAll('.chartsCard')
        .forEach(el => el.addEventListener('click', () => resolve(el.dataset.musicid)));
    });
    
    selectTrack.then(track => {
      // тут что-то сделать с выбранным треком
      console.log('выбранный трек', track);
    });
    Ответ написан
    Комментировать
  • Как найти последний индекс в массиве в диапозоне с помощью findIndex()?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    раз пошла такая пляска.. на костылях, то почему бы не
    array
      .map(el => el > min && el < max) // получился массив булевых значений
      .findIndex((c, i, arr) => c && i === arr.lastIndexOf(true)) // а чё, так можно было?!
    Ответ написан
    Комментировать
  • Устают глаза на Ubuntu, а на Windows нет, в чем проблема?

    шрифты – размер и антиалиасинг (сглаживание)

    расстояние Вне зависимости от ОС — держитесь подальше от монитора, в 60—80 см до глаз, не ближе (линейка не даст обмануть себя). И увеличивайте размер шрифтов для комфортной работы на таком расстоянии.

    яркость Избыточная яркость монитора заметно утомляет глаза. Если в одной из ОС яркость рулится программно, попробуйте её скорректировать. Для оценки, белый лист бумаги на столе (освещённый внешним светом) не должен быть очень уж заметно темнее белого на экране. Иначе яркость монитора стоит понизить.
    Ответ написан
    Комментировать
  • Как создать сайт с минимальными ресурсами?

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Минимально — по акции зарегистрировать домен ~89 рублей (за 1-й год, потом на вас наживутся).
    И бесплатно хостить статичный сайт на github — см. pages.github.com, и там же внизу "custom URL" / "custom domain".
    Ответ написан
    Комментировать
  • Как получить разницу между двумя датами в днях и в часах в плагине datetimepicker?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сначала получить разницу между двумя объектами Date в часах.
    Затем посмотреть, сколько в эти часы влезает целых суток, и вычесть их.

    const diffHours = Math.ceil((endDate - startDate) / 36e5); // точно в бОльшую сторону округлять?
    const days = Math.floor(diffHours / 24);
    const hours = diffHours - days * 24;
    
    console.log(`Срок аренды: ${days} дней и ${hours} часов`);
    Ответ написан
    1 комментарий
  • Как разбить интервал дат на периоды?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно просто прибавлять часы:
    D = new Date();
    
    D.setHours(D.getHours() + 12) // подвинули вперёд на 12 часов
    даты корректируются «автомагически».

    TODO: проверить, не будет ли сюрпризов в переходах на летнее/зимнее время, когда клиент в поясе, где сохранились эти переходы.
    spoiler

    Примерная реализация. Косяк в часовом поясе текстового представления даты: вне зависимости от входного формата, на выходе даты будут в UTC:
    (
    (start, finish) => {
      const date = new Date(start);
      const dateFinish = new Date(finish);
      const result = [];
    
      while (date <= dateFinish) {
        result.push(date.toISOString());
        date.setHours(date.getHours() + 12);
      }
      return result;
    }
    )('2020-01-01T00:00:00+03:00', '2020-03-15T11:58:01+03:00')
    /*
    Array(149) [ "2019-12-31T21:00:00.000Z", "2020-01-01T09:00:00.000Z", "2020-01-01T21:00:00.000Z", "2020-01-02T09:00:00.000Z", "2020-01-02T21:00:00.000Z", "2020-01-03T09:00:00.000Z", "2020-01-03T21:00:00.000Z", "2020-01-04T09:00:00.000Z", "2020-01-04T21:00:00.000Z", "2020-01-05T09:00:00.000Z", … ]
    */
    Ответ написан
    Комментировать
  • Как скрыть меню при нажатии на любую другую область?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ещё пара идей:
    1. рисовать прозрачный div прямо под меню поверх всего остального и слушать click на нём – так любой клик «мимо меню» будет отловлен этим div'ом
    2. слушать клик на корневом document – событие «всплывает» наверх, и если никто его раньше отловит, дойдёт до document. Этот способ менее надёжный, т.к. мимо меню можно кликнуть на другом элементе, где клики ловят и дальше не отпускают.
    Ответ написан
    Комментировать
  • Кто поможет решить задачу по JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    узнать, есть ли атрибут у элемента: element.hasAttribute('maxlength')

    установить атрибут: element.setAttribute('maxlength', 20)

    выбрать все: document.querySelectorAll('input[type=password]')

    План:
    1. выбрать все с типом password;
    2. пройти по ним циклом forEach()
    3. внутри смотреть, есть ли уже атрибут maxlength;
    4. если нет, добавить атрибут
    5. выполнить alert() в любом случае
    Ответ написан
    Комментировать
  • Какие есть VDS/VPS с оплатой криптой?

    У Gandi есть вариант оплаты биткоинами через верифицированный аккаунт на BItPay.
    Ответ написан
    Комментировать
  • Как сделать cекундомер без setInterval и setTimeout?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Я за RAF! : )

    let rafSeconds = 0;
    const rafStart = Date.now();
    const tick = () => {
      const seconds = (Date.now() - rafStart) / 1000 | 0;
      if (rafSeconds !== seconds) { // секунды изменились!
        rafSeconds = seconds;
        // TODO: отрисовать новые секунды
      }
      window.requestAnimationFrame(tick);
    }
    
    tick();
    Ответ написан
    2 комментария
  • Как узнать сколько лет человеку через input?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Слушать событие изменения — "input", брать значение – это будет строка типа "2022-01-19"
    Из неё конструировать объект Date.
    Втрой объект Date создать на сейчас. И сдвинуть год на 18 назад.
    Сравнить, какой больше:

    Ответ написан
    Комментировать
  • Как при переключении ( Cmd+tab ) разворачивать окно приложения?

    Наверное, вы минимизируете не приложение SubLime, а только одно из его окон. То же, проверил, происходит и с другими, например, с MongoDB Compass. Минимизируешь окно – остаётся заголовок приложения. Переключился в браузер. Переключился назад в Compass: заголовок есть, окна минимизированы, надо мышкой тыкать.

    Выход 1. Минимизировать таки всё приложение: обычно это Cmd + H (от слова Hide). Тогда все его окна прячутся, а когда вернётесь, все снова вылезут.

    Выход 2. Имхо удобно пользоваться несколькими десктопами: смахивать влево-вправо тремя пальцами (или Ctrl + стрелка). Тут браузер. На другом редактор кода во весь экран. На третьем тоже редактор, с другим проектом.
    Ответ написан
    Комментировать