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

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

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

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

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

Технология повзрослела: как AR защищает смартфон и ловит движения
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

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

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

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

0xD34F

  • 6881
    вклад
  • 0
    вопросов
  • 5162
    ответа
  • 90%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как отсортировать элементы по иерархии?

    0xD34F
    0xD34F @0xD34F Куратор тега JavaScript
    const sortedElements = [...elements].sort((a, b) =>
      a.relations.includes(b.id)
        ? 1
        : b.relations.includes(a.id)
          ? -1
          : a.name.localeCompare(b.name)
    );
    Ответ написан 13 нояб. 2020
    2 комментария
    Нравится 1 2 комментария
  • Как скрыть дубли строк при нескольких checked?

    0xD34F
    0xD34F @0xD34F Куратор тега jQuery
    Избавьтесь от них. А значения data-атрибутов объедините, например, вместо

    <a data-problem="value1">
    <a data-problem="value2">

    пусть будет

    <a data-problem="value1|value2">

    И проверяйте наличие хотя бы одного из выбранных значений внутри этих строк:

    $('.problem').change(function() {
      const problems = $(':checked', this)
        .get()
        .map(({ dataset: { type, problem } }) => ({ type, problem }));
    
      $(this)
        .closest('.remont')
        .find('.price__item')
        .hide()
        .filter((i, { dataset: d }) =>
          problems.some(p => d.type === p.type && d.problem.includes(p.problem))
        )
        .show();
    }).change();
    Ответ написан 13 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как принудительно обновить Store в Vuex?

    0xD34F
    0xD34F @0xD34F Куратор тега Vue.js
    deep:true

    Ну раз вы за объектом следите - заменяйте его полностью.

    Т.е., вместо obj[key] = val делайте obj = { ...obj, [key]: val }.
    Ответ написан 13 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Как проверить, что пользователя забанили (readonly)?

    0xD34F
    0xD34F @0xD34F
    Открыть профиль пользователя. Если забанен, наверху будет написано - когда, на сколько и за что. Например.
    Ответ написан 12 нояб. 2020
    Комментировать
    Нравится 3 Комментировать
  • Есть массив, внутри массива 7 хэшей. Как из хэшей взять значение и занести в отдельный массив?

    0xD34F
    0xD34F @0xD34F Куратор тега JavaScript
    const xxx = arr =>
      arr.reduce((acc, n) => (
        Object
          .entries(n)
          .forEach(([ k, v ]) => (acc[k] ||= []).push(v)),
        acc
      ), {});
    Ответ написан 12 нояб. 2020
    2 комментария
    Нравится 2 комментария
  • Почему компоненты располагаются справа?

    0xD34F
    0xD34F @0xD34F Куратор тега Vue.js
    Потому что (тут, кстати, следует немедленно поинтересоваться - с чего бы это стиль, относящийся к одному компоненту, описывается в другом?)

    .product {
        display: flex;

    По умолчанию flex располагает элементы горизонтально.

    Добавьте flex-direction: column; для .product. Элементам внутри .product, которые должны находиться на одной строке, добавьте общие обёртки, которым также будет задан display: flex;.
    Ответ написан 12 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Как показать текст в зависимости от data в checkbox?

    0xD34F
    0xD34F @0xD34F Куратор тега jQuery
    $('.problem').change(({ target: t }) => {
      const attrsSelector = [ 'type', 'problem' ]
        .map(n => `[data-${n}="${t.dataset[n]}"]`)
        .join('');
    
      $(`.price-problem ${attrsSelector}`).toggle(t.checked);
    }).find('input').change();
    Ответ написан 12 нояб. 2020
    3 комментария
    Нравится 1 3 комментария
  • Как слить два массива?

    0xD34F
    0xD34F @0xD34F
    $arr3 = array_map(fn($n, $m) => array_merge($n, [ 'quantity' => $m ]), $arr1, $arr2);
    Ответ написан 12 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Как обернуть все картинки в блоке в ссылку на саму же себя?

    0xD34F
    0xD34F @0xD34F Куратор тега jQuery
    $('.item img').wrap(function() {
      return `<a href="${this.getAttribute('src')}"></a>`;
    });

    или

    $('.item').html((i, html) => `<a href="${html.match(/(?<=src=")[^"]*/)}">${html}</a>`);
    Ответ написан 11 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как исправить работу setState?

    0xD34F
    0xD34F @0xD34F
    Никак не исправить, всё работает правильно. Хотите пощупать изменённое значение - для этого есть useEffect.
    Ответ написан 11 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как получить значение, а не удалить?

    0xD34F
    0xD34F @0xD34F
    preg_match('/\/season\/(\d+)\//', $string, $match);
    $season = $match[1];
    Ответ написан 11 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как фиксировать все изменения поля input?

    0xD34F
    0xD34F @0xD34F Куратор тега JavaScript
    Замените $input.change(); на $input.get(0).dispatchEvent(new Event('input'));.

    Или, перепишите подключение обработчика события input с использованием jquery ($input.on('input', ...), тогда вместо $input.change(); должно быть $input.trigger('input');.
    Ответ написан 10 нояб. 2020
    2 комментария
    Нравится 1 2 комментария
  • Как передавать класс по кругу?

    0xD34F
    0xD34F @0xD34F Куратор тега jQuery
    const $items = $('селектор элементов');
    const className = 'имя класса';
    let index = -1;
    
    $('селектор кнопки').click(function() {
      $items.eq(index).removeClass(className);
      index = (index + 1) % $items.length;
      $items.eq(index).addClass(className);
    });
    Ответ написан 10 нояб. 2020
    Комментировать
    Нравится Комментировать
  • Как сократить код Google Maps, если нужно добавить несколько меток?

    0xD34F
    0xD34F @0xD34F Куратор тега JavaScript
    Складываем данные маркеров в массив объектов - каждый содержит координаты и контент всплывающего окна:

    const markersData = [
      { position: { lat: ..., lng: ... }, content: '...' },
      { position: { lat: ..., lng: ... }, content: '...' },
      ...
    ];

    Всплывающее окно - одно на всех:

    const infoWindow = new google.maps.InfoWindow();

    Создаём массив маркеров:

    const markers = markersData.map(({ position, content }) => {
      const marker = new google.maps.Marker({ position, map });
    
      marker.addListener('click', () => {
        infoWindow.setContent(content);
        infoWindow.open(map, marker);
      });
    
      return marker;
    });

    Смена иконки - сделаем метод, который будет устанавливать активную у указанного маркера, а у остальных дефолтную (если надо сбросить текущую активную, передаёте null):

    const setActiveIcon = marker => markers.forEach(n => n.setIcon(n === marker ? iconActive : icon));

    Всё.
    Ответ написан 10 нояб. 2020
    3 комментария
    Нравится 2 3 комментария
  • Как преобразовать данный список в дерево?

    0xD34F
    0xD34F @0xD34F Куратор тега JavaScript
    function createTree(arr) {
      const tree = Object.fromEntries(arr.map(({ parts, ...n }) => [ n.id, n ]));
      arr.forEach(n => tree[n.id].children = n.parts?.map(m => tree[m]) ?? []);
      return Object.values(tree).filter(n => arr.every(m => !m.parts?.includes(n.id)));
    }
    Ответ написан 09 нояб. 2020
    1 комментарий
    Нравится 2 1 комментарий
  • Как сделать на странице несколько блоков с табами?

    0xD34F
    0xD34F @0xD34F Куратор тега jQuery
    Оберните каждую пару из списка и формы в отдельные <div class="wrapper">.

    $('.request__nav').on('click', '.request__nav__item', function() {
      const $this = $(this);
      $this
        .addClass('active')
        .siblings()
        .removeClass('active')
        .closest('.wrapper')
        .find('.request__field')
        .hide()
        .eq($this.index())
        .fadeIn();
    }).each(function() {
      $('.request__nav__item', this).first().click();
    });
    Ответ написан 09 нояб. 2020
    1 комментарий
    Нравится 1 комментарий
  • Как вывести все уникальные данные по колонке + к ней любое рандомное значение из др колонки?

    0xD34F
    0xD34F @0xD34F
    SELECT DISTINCT ON ("code") "code", "key"
    FROM table_name
    Ответ написан 09 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как скрыть содержимое таба при раскрытии другого таба?

    0xD34F
    0xD34F @0xD34F Куратор тега jQuery
    $('a').click(function() {
      const $tabs = $('.splCont');
      const $tab = $tabs.eq($(this).index()).toggle('normal');
      $tabs.not($tab).hide('normal');
    
      return false;
    });
    Ответ написан 09 нояб. 2020
    2 комментария
    Нравится 2 комментария
  • Как на Python корректно заполнить матрицу?

    0xD34F
    0xD34F @0xD34F
    row = [ 2, 3, 7, 9 ]
    num_rows = 5
    
    matrix = [ [ f'Ряд {i + 1}, число {item}' for item in row ] for i in range(num_rows) ]
    Ответ написан 08 нояб. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как преобразовать время в секунды на javascript?

    0xD34F
    0xD34F @0xD34F Куратор тега JavaScript
    const toSeconds = str => str
      .split(':')
      .reverse()
      .reduce((acc, n, i) => acc + n * (60 ** i), 0);
    Ответ написан 08 нояб. 2020
    12 комментариев
    Нравится 12 комментариев
Оценили как «Нравится»
  • ← Предыдущие
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • Следующие →
Самые активные сегодня
  • SoreMix
    SoreMix
    • 10 ответов
    • 0 вопросов
  • Василий Банников
    • 8 ответов
    • 0 вопросов
  • Dr. Bacon
    • 7 ответов
    • 0 вопросов
  • shambler81
    Виктор Таран
    • 6 ответов
    • 0 вопросов
  • Decaf
    • 6 ответов
    • 0 вопросов
  • SignFinder
    Alexey Dmitriev
    • 5 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

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

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