• Какие клавишы отвечают за multiple selection в Webstorm на Linux?

    @leonidl
    alt + click - поставит дополнительный курсор
    alt + j - выделяет такой же кусок кода
    alt + shift + j - отменяет выделение
    shift + ctrl + alt + j - выделяет все одинаковые кусочки кода

    Другие горячие клавиши можно найти в: Help - Default Keymap Reference
    Ответ написан
    Комментировать
  • Какой метод перебора массивов JS использовать и как?

    0xD34F
    @0xD34F Куратор тега JavaScript
    map/filter:

    arr.map((n, i) => n ? i : null).filter(n => n !== null)
    // или
    arr.map((n, i) => n ? i : NaN).filter(n => n === n)
    // или
    arr.map((n, i) => !!n && i).filter(Number.isInteger)
    // или
    arr.map((n, i) => !n || i).filter(n => n !== !0)

    reduce:

    arr.reduce((acc, n, i) => n ? [ ...acc, i ] : acc, [])
    // или
    arr.reduce((acc, n, i) => (n && acc.push(i), acc), [])

    или, если надо изменить текущий массив, а не создавать новый

    for (let i = arr.length; i--;) {
      if (arr[i]) {
        arr[i] = i;
      } else {
        arr.splice(i, 1);
      }
    }
    
    // или
    
    arr.reduceRight((_, n, i, a) => n ? a[i] = i : a.splice(i, 1), 0);
    
    // или
    
    arr.splice(0, arr.length, ...любое_выражение_с_map/filter_или_reduce_из_показанных_выше);
    
    // или
    
    let count0 = 0;
    
    for (const [ i, n ] of arr.entries()) {
      arr[i - count0] = i;
      count0 += !n;
    }
    
    arr.length -= count0;
    Ответ написан
    Комментировать
  • JS работа с временем - предыдущая неделя, месяц?

    des1roer
    @des1roer Автор вопроса
    ученье - свет, а неученье - приятный полумрак
    momentjs.com

    function textToDate(txt) {
        if (txt == 'week') {
            var startOfWeek = moment().startOf('week').format('DD.MM.YYYY');
            var endOfWeek = moment().endOf('week').format('DD.MM.YYYY');
            return startOfWeek + ' - ' + endOfWeek;
        }
        else if (txt == 'day') {
            var startOfWeek = moment().startOf('day').format('DD.MM.YYYY');
            return startOfWeek;
        }
        else if (txt == 'lastday') {
            var startOfWeek = moment().subtract(1, 'day').startOf('day').format('DD.MM.YYYY');
            return startOfWeek;
        }
        else if (txt == 'hour') {
            var startOfWeek = moment().startOf('hour').format('DD.MM.YYYY HH:00');
            var endOfWeek = moment().startOf('hour').add(1, 'hour').format('HH:00');
            return startOfWeek + ' - ' + endOfWeek;
        }
        else if (txt == 'lastweek') {
            var startOfWeek = moment().subtract(1, 'week').startOf('week').format('DD.MM.YYYY');
            var endOfWeek = moment().subtract(1, 'week').endOf('week').format('DD.MM.YYYY');
            return startOfWeek + ' - ' + endOfWeek;
        }
        else if (txt == 'month') {
            var startOfWeek = moment().startOf('month').format('DD.MM.YYYY');
            var endOfWeek = moment().endOf('month').format('DD.MM.YYYY');
            return startOfWeek + ' - ' + endOfWeek;
        }
        else if (txt == 'lastmonth') {
            var startOfWeek = moment().subtract(1, 'month').startOf('month').format('DD.MM.YYYY');
            var endOfWeek = moment().subtract(1, 'month').endOf('month').format('DD.MM.YYYY');
            return startOfWeek + ' - ' + endOfWeek;
        }
        else
            return txt;
    }
    Ответ написан
    Комментировать
  • Как правильно сделать рекурсию в обратном порядке на JS?

    @Piratt14
    Если я вас правильно понял то вот решение 5dea7a2e1d43f033236310.png и вот ссылка на песочницу, где можно потрогать и скопировать код
    Ответ написан
    1 комментарий
  • Как правильно обойти объект JS для построения дерева?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Составление дерева любого уровня вложенности.

    const categories = [
      { id: 1, name: 'name 1', parent: null },
      { id: 2, name: 'name 2', parent: 1 },
      { id: 3, name: 'name 3', parent: 6 },
      { id: 4, name: 'name 4', parent: 5 },
      { id: 5, name: 'name 5', parent: 6 },
      { id: 6, name: 'name 6', parent: null },
      { id: 7, name: 'name 7', parent: null }
    ]
    
    function buildTree (array) {
      // Складываем все элементы будущего дерева в мап под id-ключами
      // Так легче делать поиск родительской ноды
      const map = new Map(categories.map(item => [item.id, item]));
      
      // Обход в цикле по значениям, хранящимся в мапе
      for (let item of map.values()) {
        
        // Проверка, является ли нода дочерней (при parent === null вернет undefined)
        if (!map.has(item.parent)) {
          continue;
        }
        
        // Сохраняем прямую ссылку на родительскую ноду, чтобы дважды не доставать из мапа
        const parent = map.get(item.parent);
    
        // Добавляем поточную ноду в список дочерних нод родительчкого узла.
        // Здесь сокращено записана проверка на то, есть ли у ноды свойство children.
        parent.children = [...parent.children || [], item];
      }
    
      // Возвращаем верхний уровень дерева. Все дочерние узлы уже есть в нужных родительских нодах
      return [...map.values()].filter(item => !item.parent);
    }
    
    const tree = buildTree(categories);
    
    console.log(tree);
    Ответ написан
    Комментировать
  • Как правильно обойти объект JS для построения дерева?

    mashletov
    @mashletov
    Math.random()
    const categories = [
        { id: 1, name: 'name 1', parent: null },
        { id: 2, name: 'name 2', parent: 1 },
        { id: 3, name: 'name 3', parent: 6 },
        { id: 4, name: 'name 4', parent: 5 },
        { id: 5, name: 'name 5', parent: 6 },
        { id: 6, name: 'name 6', parent: null },
        { id: 7, name: 'name 7', parent: null }
    ];
    
    function buildTree(items, parent) {
        parent = parent || null;
        let result = [];
    
        items.forEach((item) => {
            if (item.parent === parent) {
                result.push(item);
                item.children = buildTree(items, item.id);
    
                if (!item.children.length) {
                    delete item.children;
                }
            }
        });
        
        return result;
    }
    // todo: не обходить уже добавленные
    console.log(buildTree(categories));
    Ответ написан
    Комментировать
  • Отправка данных формы vuejs на почту через php?

    daruvayc0
    @daruvayc0
    Наверно уже не актуально, но вдруг кому поможет. Попробуйте вот так получить необработанные Post-данные, это нужно делать если вы передаете data в формате Json.
    $inputJSON = file_get_contents('php://input');
    $input = json_decode($inputJSON, TRUE);
    
    $name = $input['name'];
    $email = $input['email'];
    
    $message = "Name: ".$name."\nEmail: ".$email;
    Ответ написан
    Комментировать
  • Как обращаться к БД mongodb, когда выкладываешь на VPS хостинг?

    Вот достаточно грубое описание:
    1) На сервере где крутится база данных есть еще веб-сервер (nginx), за котором размещается система скриптов, которые как раз локально и работают с базой данных (читать Rest API, Graph QL и т.п.) В крупных фреймворках, независимо от языка программирования - данный функционал уже реализован.
    2) На твоем клиентском компе клиентская часть твоего софта через протокол http обращается к веб-серверу, твоим скриптам и уже через них работает с базой данных.
    3) VS code - нужен для разработки. На хостинг его ставить не надо. Что-то серверное ты можешь написать у себя в локалке, а потом через SFTP закинуть на сервер
    4) И да, ты временно можешь на локалке поднять веб-сервер и базу данных и через rest api тестировать свой код. Дальше просто меняешь ip к которому обращаешся на ip хостинга и все.
    Ответ написан
    1 комментарий
  • Bootstrap Table как раскрывать только одну деталь?

    coderisimo
    @coderisimo Куратор тега JavaScript
    например, вот так :

    Ответ написан
    2 комментария