Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
MagnusDidNotBetray

MagnusDidNotBetray

Самый елеустремленный человек
  • 49
    вклад
  • 5
    вопросов
  • 45
    ответов
  • 80%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Что случилось со сценами telegraf?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    //index.js
    
    const { Telegraf, Markup, Scenes, session } = require('telegraf');
    const firstScene = require('./controllers/first');
    const secondScene = require('./controllers/second');
    
    const bot = new Telegraf(token, {});
    const stage = new Scenes.Stage([
       firstScene,
       secondScene
    ]);
    
    bot.use(stage.middleware());
    
    // controllers/first/index.js
    
    const { Scenes } = require('telegraf');
    
    const first = new Scenes.BaseScene('first');
    
    first.enter(async ctx => {});
    
    module.exports = first;
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Как написать аналог решение через jq «.on('click')» на чистом JS?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как убрать элемент из события?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Что не так?

    У кнопки есть класс item-btn но нет класса .item-btn

    А вообще. проверки странные какие-то, можно проще.
    ({ target }) => {
      if(target.closest('.item-btn')) {
        return
      }
      // остальной код...
    }
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Почему undefiend у времени?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Что по вашему должна делать вот эта строчка?
    time.innerText = time.value
    Откуда у тега span атрибут value?
    Может вы хотели сделать так?
    time.innerText = btnTime[i].innerText;
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Позднее статическое связывание, как использовать переопределенное св-во в родительском классе?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Это невероятно сложно, но всё же возможно.

    class A {
      static text: string = 'A class';
    
      static getA() {
        return this.text; // что-то типа static.text
      }
    }
    
    class B extends A {
      static text: string = 'B class';
    }
    
    console.log(A.getA()); // A class
    console.log(B.getA()); // B class
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Как в массиве с одинаковым полем отсортировать данные по цене и удалить наименьшие из массива?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    const arr = [{ name: "Creeper's Cruel Painsaw", price: '2.53', rarity: 'Common' },
    { name: "Creeper's Cruel Painsaw", price: '2.50', rarity: 'Common' },
    { name: 'Cuffs of Oak and Yew', price: '3.94', rarity: 'Rare' },
    { name: 'Cuffs of Oak and Yew', price: '4.99', rarity: 'Rare' },
    { name: 'Curled Root-Staff', price: '2.91', rarity: 'Common' },
    { name: 'Curled Root-Staff', price: '3.33', rarity: 'Common' }];
    
    const sorted = [...arr].sort((a, b) => a.price - b.price).slice(1);
    console.log(sorted); /* [
    	{ name: "Creeper's Cruel Painsaw", price: "2.53", rarity: "Common" },
      { name: "Curled Root-Staff", price: "2.91", rarity: "Common" },
      { name: "Curled Root-Staff", price: "3.33", rarity: "Common" },
      { name: "Cuffs of Oak and Yew", price: "3.94", rarity: "Rare" },
      { name: "Cuffs of Oak and Yew", price: "4.99", rarity: "Rare" }
    ] */
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Как изменить значение option визуально?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Как-то так?
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как сгенерировать массив дней недели за определённый месяц?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    const array = [];
    
    for (let i = 1; i < 32; i++){
      array.push(i);
    }
    
    array.forEach(e => {
      const date = new Date(2020, 0, e);
      const day = new Intl.DateTimeFormat('ru-RU', { weekday: 'long'}).format(date);
      console.log(`${e} января, ${day}`);
    });
    Ответ написан более двух лет назад
    6 комментариев
    6 комментариев
  • Как реализовать функцию которая выводит значение объекта?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    obj = {
      s:2,
      d:4,
      g: {t:4}
    };
    
    const getValueObj = (obj, path) => {
      return path.split('.').reduce((acc, key) => acc[key], obj);
    }
    
    getValueObj(obj, 'g.t') //4
    Ответ написан более двух лет назад
    2 комментария
    2 комментария
  • Как сделать так что бы opacity текста не изменялся?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    У элементов с position: static свойство z-index всегда auto, поэтому текст перекрывается псевдоэлементом. Нужно задать тексту position: relative, чтобы сработал z-index: 1
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как изменить поле в mongodb?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Так?
    const test = await Config.findOne()
    await Config.findOneAndUpdate({isWorking: {$exists: true}}, {$set: {isWorking: 1}});
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Как сделать плавный динамический выпадающий список?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Можно так, например
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Как сделать оверлей когда sidebar открыт?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Можно на кнопки открытия и закрытия сайдбара навесить свои обработчики
    document.addEventListener('DOMContentLoaded', () => {
      const buttonOpen = document.querySelector('.ob-widget-btn');
      const buttonClose = document.querySelector('.ob-widget-container__header__close__cross');
      buttonOpen.addEventListener('click', () => {
      	document.body.classList.add('darken');
    	});
      buttonClose.addEventListener('click', () => {
      	document.body.classList.remove('darken');
    	});
    });
    Ответ написан более двух лет назад
    5 комментариев
    5 комментариев
  • Как убрать пробел при выводе переменной в JS?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Попробуйте использовать шаблонные строки, а то с этой кучей конкатенаций не разобраться.
    https://jsfiddle.net/p4usn2dc/
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как оптимизировать код выпадающего списка?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Использовать перебор и делегирование.
    Ответ написан более двух лет назад
    1 комментарий
    1 комментарий
  • Как правильно прописать тип аргумента, чтобы были видны статичные свойства класса?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Так?
    class A {
      public static b: number = 123;
    }
    function f<T extends {b: number, new (...args: any[]): InstanceType<T>}>(cls: T) {
      console.log(cls.b);
    }
    Ответ написан более двух лет назад
    2 комментария
    2 комментария
  • Как сделать алгоритм по подбору вариантов?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Набросал что-то, разбирайтесь, если хотите:
    const array = ['a', 'b', 'c', 'd', 'e', '1', '2', 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j'];
    
    const getRandowPairs = arr => {
      const sorted = [...new Set(arr)].sort((a, b) => Math.round(Math.random()) || -1);
      let res = [];
      for (let i = 0; i + 1 < sorted.length; i += 2){
        res.push([sorted[i], sorted[i + 1]]);
      }
      return res;
    };
    
    const getRandomArr = arr => {
      const index = Math.floor(Math.random() * arr.length);
      const item = arr[index];
      arr.splice(index, 1);
      arr = arr.flatMap(e => e);
      const set = new Set();
      while (set.size < 5){
        let i = Math.floor(Math.random() * arr.length);
        if (!item.includes(arr[i])){
          set.add(arr[i]);
        }
      }
      return [item[1], ...set];
    };
    
    console.log(getRandomArr(getRandowPairs(array))); // [ "c", "e", "h", "a", "1", "2" ]
    console.log(getRandomArr(getRandowPairs(array))); // [ "1", "a", "d", "f", "h", "c" ]
    console.log(getRandomArr(getRandowPairs(array))); // [ "f", "b", "j", "g", "a", "2" ]


    Судя по последнему комментарию автора, нужно так:
    const array = ['a', 'b', 'c', 'd', 'e', '1', '2', 'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j'];
    
    const getRandowPair = arr => {
      const sorted = [...new Set(arr)].sort((a, b) => Math.round(Math.random()) || -1);
      let res = [];
      for (let i = 0; i + 1 < sorted.length; i += 2){
        res.push([sorted[i], sorted[i + 1]]);
      }
      return res[Math.floor(Math.random() * res.length)];
    };
    const item = getRandowPair(array);
    const set = new Set();
    while (set.size < 5){
      let i = Math.floor(Math.random() * array.length);
      if (!item.includes(array[i])){
        set.add(array[i]);
      }
    }
    const result = [item[1], ...set];
    console.log(result); // [ "e", "h", "c", "2", "j", "b" ]
    Ответ написан более двух лет назад
    2 комментария
    2 комментария
  • Каким образом сделать такую проверку по массиву JS?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Рассчитываем на то, что массив отсортирован.
    if (scroll < arrayPositions[0]) return;
    let index = arrayPositions.findIndex((el, i, arr) => scroll < arr[i + 1]);
    Ответ написан более двух лет назад
    2 комментария
    2 комментария
  • Как мне обновить value объекта?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Вообще не знаю реакт, но вижу, что вы постоянно пушите в массив новый объект, вместо того чтобы менять текущий. Может вы так хотели сделать?
    const handleChange = (index, value, key) => {
        const newFields = [...fields];
        newFields[index][key].value = value;
        setFields(newFields);
    };
    Ответ написан более двух лет назад
    Комментировать
    Комментировать
  • Как позиционировать svg в форме?

    MagnusDidNotBetray
    MagnusDidNotBetray @MagnusDidNotBetray
    Самый елеустремленный человек
    Можно сделать так, или вынести картинку из формы
    Ответ написан более двух лет назад
    5 комментариев
    5 комментариев
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • Следующие →
Самые активные сегодня
  • vabka
    Василий Банников
    • 6 ответов
    • 0 вопросов
  • dimonchik2013
    Dimonchik
    • 6 ответов
    • 0 вопросов
  • Роман Безруков
    • 4 ответа
    • 0 вопросов
  • MVV
    • 4 ответа
    • 0 вопросов
  • Mike_Ro
    Михаил Р.
    • 4 ответа
    • 0 вопросов
  • Rsa97
    Rsa97
    • 3 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

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