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

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

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

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

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

Облака: ожидание vs реальность
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

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

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

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

Дмитрий Гололобов

начинающий
  • 48
    вклад
  • 16
    вопросов
  • 71
    ответ
  • 45%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как из объектов достать значения?

    Дмитрий Гололобов @dGololobov
    начинающий
    const users = [ .......  ]
    const admins = users.filter(user => user.rank === 'admin').map(user => `${user.lastname} ${user.name}`).join(', ');
    console.log(`Админы: ${admins}`);
    Ответ написан вчера
    1 комментарий
    Нравится 1 1 комментарий
  • Проблема с автопостом (telegram bot)?

    Дмитрий Гололобов @dGololobov
    начинающий
    У heroku есть защита от брошенных проектов. Поэтому через некоторое время ваш бот просто отключается.
    Если вы хотите использовать heroku, то вам нужно чем-то будить бот из вне.

    Т.е. когда вы дернули бота и сказали ему записать пост в базу, он все сделал.
    А в тот момент когда настало время делать пост, бот спит.
    Ответ написан 14 февр.
    Комментировать
    Нравится 1 Комментировать
  • Как собрать этот текст из массива и придать ему первоначальный вид?

    Дмитрий Гололобов @dGololobov
    начинающий
    Ну вы не сможете это сделать автоматически.
    Поэтому, я подозреваю, что эта задача на понимание порядка элементов в массиве, и в способах получения этих элементов.
    Предлагаю создать вспомогательный массив для определения верного порядка фраз, затем получить верно отсортированный массив фраз, ну и следом просто объединить его в строку через пробел.
    Скорее всего ответ будет такой:
    const array = ['я в Симбирск,', 'в трактире.', '...']
    const order = [3, 7, 0, 8, 11, 5, 9, 6, 4, 1, 12, 2, 10]
    const strings = order.reduce((strings, number) => [...strings, array[number]], [])
    const result = strings.join(' ')
    Ответ написан 06 февр.
    2 комментария
    Нравится 1 2 комментария
  • Как сделать чтобы ховер эффект не повторялся?

    Дмитрий Гололобов @dGololobov
    начинающий
    Используйте функцию debounce
    Она позволяет ограничить количество запусков любой функции на определенный промежуток времени.
    function debounce(f, ms) {
      let isRunning = false;
      return function() {
        if (isRunning) return;
        f.apply(this, arguments);
        isRunning = true;
        setTimeout(() => isRunning = false, ms);
      };
    }
    
    function myFunction {
      console.log('i am working');
    }
    
    const debouncedMyFunction = debounce(myFunction, 2000);
    
    debouncedMyFunction(); // Выполнится
    debouncedMyFunction(); // Будет проигнорирована
    Ответ написан 15 дек. 2020
    1 комментарий
    Нравится 1 комментарий
  • Как менять динамически значения в массиве по условию?

    Дмитрий Гололобов @dGololobov
    начинающий
    Почитайте про реактивность во vue. В документации очень доступно все написано. https://ru.vuejs.org/v2/guide/reactivity.html
    Для замены значений в массиве вы можете воспользоваться минимум следующими способами:
    1) Менять значение через splice:
    this.array.splice(oldElementIndex, 1, newElement)
    2) Менять значение через vue set:
    this.$set(this.array, oldElementIndex, newElement)
    3) Поменять весь массив разом, например через map:
    this.array = this.array.map(el => {
        el.someParam = 1
         return el
    })
    Ответ написан 15 дек. 2020
    1 комментарий
    Нравится 1 1 комментарий
  • Метод remove выдает ошибку, как можно устранить?

    Дмитрий Гололобов @dGololobov
    начинающий
    const elements = document.querySelectorAll( '.nav__link, .open')
    elements.forEach(element => {
       element.classList.remove('open')
    })
    Ответ написан 11 дек. 2020
    Комментировать
    Нравится 3 Комментировать
  • Как сделать валидацию инпута в Vue в реальном времени?

    Дмитрий Гололобов @dGololobov
    начинающий
    Используйте vee-validate или повешайте обработчик на v-on:change
    Ответ написан 07 дек. 2020
    2 комментария
    Нравится 2 комментария
  • Загрёб окончательно. Не понимаю почему происходит вызов модального окна при загрузке, тогда как это должно происходить при клике?

    Дмитрий Гололобов @dGololobov
    начинающий
    Вы вместо присвоения функции делаете ее вызов.

    function showAlert () {
        alert('кнопка нажата');
    }
    window.onload = function() {
       document.getElementById("btmCheckEmpty").onclick = showAlert;
     }
    Ответ написан 15 нояб. 2020
    1 комментарий
    Нравится 1 1 комментарий
  • Почему кнопка переключает чекбокс?

    Дмитрий Гололобов @dGololobov
    начинающий
    Потому что у вас class checkbox у вас display: block; растягивается на всю ширину.
    Вам кнопку надо поднять как-то над блоком. Поработать с z-index кнопки и чекбокса надо.
    Ответ написан 11 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как отобразить связанные данные из двух массивов во Vue?

    Дмитрий Гололобов @dGololobov
    начинающий
    Ну в идеале. Вы могли бы и из базы данных теоретически получать посты, сразу с указанием автора например.
    Ну да ладно.Тут вариантов несколько.
    Вы можете при получении пользователей подправить массив this.posts:

    async getAllUsers() {
            const { data: users } = await axios.get('http://jsonplaceholder.typicode.com/users')
             this.posts = this.posts.map(p => {
                    p.author = users.find(u => u.id === p.userId)
                    return p
              })
          },


    Вариант номер два - сделать тоже самое, но уже в computed-секции и вывести результат в шаблон.
    Ответ написан 11 нояб. 2020
    4 комментария
    Нравится 4 комментария
  • Фиктивные данные при запросе vue?

    Дмитрий Гололобов @dGololobov
    начинающий
    Погуглите что-нибудь по фразе mock server js
    Или вы всегда можете развернуть простейший веб-сервер на том же express и прописать нужные роуты
    Ответ написан 09 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Regex удаление до формата??

    Дмитрий Гололобов @dGololobov
    начинающий
    Вы уверены что вам нужна регулярка?
    Можно так:
    const filename = 'file.ext'
    const ext = filename.split('.')[1] // 'ext'


    Или если у вас в именах файлов может быть несколько точек, то можно в 2 шага:
    const filename = 'file.ext'
    const extSplitted = filename.split('.')
    cosnt ext = extSplitted[extSplitted.length - 1]. // 'ext'


    А регулярку имеет смысл использовать если у вас заранее определенный список возможных расширений.
    const filename = 'file.jpg'
    const matched = filename.match(/jpg|mp3|png|mp4/)
    if (matched !== null) console.log('file extension is:', matched[0])


    Ну и еще ваш вариант:
    const filename = 'file.jpg'
    const matched = filename.replace(/\w+/, '').replace('.', '')
    console.log(matched) // 'jpg'
    Ответ написан 09 нояб. 2020
    4 комментария
    Нравится 4 комментария
  • Дополняется константа массива, хотя явного преобразования нет. Как решить?

    Дмитрий Гололобов @dGololobov
    начинающий
    outlineRectSize использует p_tiles, в который вы при втором вызове передаете tiles.from_pass
    А потом внутри функции вы напрямую изменяете (дополняете) значения в p_tiles
    Чтобы значения не менялись, надо внутри функции сделать копию массива. Например через JSON.parse()

    const copyOfArray = JSON.parse(JSON.stringify(sourceArray))

    Второй момент: внутри функции roundTile у вас происходит собственно повторный вызов outlineRectSize. А зачем? Если вы не хотите менять массив. А если все же хотите, тогда почему вызов не возвращается в переменную?

    Вот пример кода для понимания того, что у вас происходит.
    const f = (arr = []) => {
    	arr.push(1)
            arr.push(2)
             return arr
    }
    
    const basicArr = f([]) // [1,2]
    
    f(basicArr)
    
    console.log(basicArr) // [1, 2, 1, 2]
    Ответ написан 09 нояб. 2020
    1 комментарий
    Нравится 1 1 комментарий
  • Для чего во Vue data пишется таким образом?

    Дмитрий Гололобов @dGololobov
    начинающий
    Внутри Vue data вызывается как функция. Т.е. в момент когда vue готово обратиться к параметрам data там происходит такой вызов:

    data()

    Соответственно прямое обращение к data объявленному как объект ( data: {} ) вызовет ошибку Uncaught TypeError: data is not a function.

    Теперь о втором варианте. data: () => {} - такое объявление подразумевает, что внутри блока {} будут какие условия.
    А после вызова функции data() vue ожидает в результате получить объект.

    При использовании стрелочной функции нам остается использовать два варианта по сути:
    Краткая запись:
    data: () => ({ param: 1 }) //Возвращает объект
    Расширенная запись:
    data: () => {
     return {
         param: 1 
      }
    }


    Если осталось много неясных моментов то можете попробовать прочитать вот эту статью
    Ответ написан 08 нояб. 2020
    2 комментария
    Нравится 5 2 комментария
  • Как удалить элементы массива в цикле?

    Дмитрий Гололобов @dGololobov
    начинающий
    Можно сделать вот так. Такой метод целиком заменит весь массив, оставив в нем только элементы со свойством completed !== true
    clearCompleted() {
        this.tasks = this.tasks.filter(t => !t.completed)
    }
    Ответ написан 05 нояб. 2020
    1 комментарий
    Нравится 1 1 комментарий
  • Как обновить значение в элементе массива?

    Дмитрий Гололобов @dGololobov
    начинающий
    Если вы хотите сделать именно так как у вас написано, то вот вариант:
    this.inputs.forEach((value, index) => {
      this.$set(this.inputs, index, {...value, label: value.label1})
    });


    Но я бы сделал по другому. Если мне нужно заменить label на label1 из того же элемента во всех элементах массива.
    Можно например отмапить весь массив. И по идее вам даже set не понадобится:

    this.inputs = this.inputs.map(item => ({ ...item, label: item.label1 }))


    В вашем варианте как я понимаю отрисовка компонента будет происходить всякий раз, когда вы изменяете элемент массива. В моем же варианте отрисовка произойдет один раз, только после того как весь массив будет обновлен.
    Ответ написан 05 нояб. 2020
    1 комментарий
    Нравится 3 1 комментарий
  • Как преобразовать объект со вложенными объектами в простой объект?

    Дмитрий Гололобов @dGololobov
    начинающий
    const obj = { a: 100, b: 152, c: { y: 133, x: { m: 20} } }
    const flatObject = (current) => {
        return Object.keys(current).reduce((acc, cur) => {
          if (typeof(current[cur]) !== 'object') {
             	acc[cur] = current[cur]
          } else {
          	      acc = {...acc, ...flatObject(current[cur]) }
          }
         	return acc
    }, {})
    }
    
    console.log(flatObject(obj))
    Ответ написан 03 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Как в Quasar можно использовать файлы .env?

    Дмитрий Гололобов @dGololobov
    начинающий
    Все вы делаете верно по сути, кроме одного пункта.
    Во vue переменные окружения нужно правильно называть, чтобы они подцепились при сборке.
    VUE_APP_BACKEND_API_CARS_URL
    Т.е. обязательно добавляйте префикс VUE_APP_
    https://cli.vuejs.org/ru/guide/mode-and-env.html#%...
    Ответ написан 01 нояб. 2020
    4 комментария
    Нравится 4 комментария
  • Возможно ли тестировать бота offline?

    Дмитрий Гололобов @dGololobov
    начинающий
    Как и любое приложение. Вам для этого надо создать mock-сервер например. Который будет по таким же запросам отдавать заранее заготовленные данные.
    Вот тут можете выбрать что-нибудь:
    https://openbase.io/packages/top-nodejs-mock-serve...
    Ответ написан 22 окт. 2020
    Комментировать
    Нравится Комментировать
  • Как исправить ошибку на сайте после редактирования страницы?

    Дмитрий Гололобов @dGololobov
    начинающий
    Убери один плюс в сообщение HOTEL_INFO
    <a href="tel:++79531063288">...</a>
    ->
    <a href="tel:+79531063288">...</a>
    Ответ написан 17 окт. 2020
    3 комментария
    Нравится 3 комментария
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • Следующие →
Самые активные сегодня
  • Василий Банников
    • 16 ответов
    • 0 вопросов
  • IonDen
    Денис Инешин
    • 10 ответов
    • 0 вопросов
  • opium
    Пума Тайланд
    • 8 ответов
    • 0 вопросов
  • nava2002
    Borys Latysh
    • 8 ответов
    • 0 вопросов
  • rPman
    • 7 ответов
    • 0 вопросов
  • Dr. Bacon
    • 7 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

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

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