Задать вопрос
  • Почему при console.log выводится массив(подчеркнуто красным), а при return возвращается промис (подчеркнутно желтым)?

    @dimoff66
    Кратко о себе: Я есть
    Потому что функция async, если вы вызываете ее напрямую, без await, конечно она возвратит промис.
    Ответ написан
    Комментировать
  • React и Vue. Что желательно знать?

    @dimoff66
    Кратко о себе: Я есть
    С моей точки зрения React + redux + какие-нибудь примочки для упрощения css - например sass, css--modules, styled components . Всё остальное не принципиально. Из роуд-мапа 30% я вообще не слышал, еще 50% слышал но не пользовался. Тем не менее замечательно профессионально работаю.

    UPD Что я использую
    1) Понятно что основы: js(esma) + css + html
    2) React + redux
    3) React hooks (небольшая библитека для превращения простых функций в полноценный реакт компонент с состоянием и событиями, для начала достаточно посмотреть несколько примеров по useState и UseEffect, а потом по мере необходимости углубляться.
    4) Менеджер пакетов npm - Там нечего знать, просто несколько основных команд
    5) Для CSS - css-modules (учить там нечего, в современных сборках create-react-app идет из коробки) и SASS, тут стоит потратить полдня почитать документацию, для маленьких и средних проектов или проектов с небольшим количеством элементов на странице смысла особого использовать может нет, css-modules более чем выполняет задачу, но для больших проектов может быть очень полезен
    6) Сборщик: WebPack - никогда сам не настраивал. Читал, вроде ничего сложного.
    7) ReactRouter - необходимая вещь, хотя в последнее время я смотрю в сторону Hookrouter, более простая и приятная штука
    8) Тестирование jest, enzyme - Их невозможно выучить, приходит только с опытом. Тестирование это вообще отдельное искусство и требует отдельной конфигурации головного мозга. Я бы вообще тесты сажал писать отдельного человека, когда их пишут сами разработчики в 80% случаев они делают это на отвали.
    9) Библиотека функций Lodash - куча полезных функций, упрощающих работу с кодом для массивов, объектов, строк и т.д.
    10) Библиотека moment - приходит с опытом. Недостаточно ее просто прочитать, много подводных камней, особенно с временными зонами, которые понимаешь только понаступав на грабли.
    Ответ написан
  • Разумно ли импортировать одни и те же библиотеки в каждый модуль?

    @dimoff66
    Кратко о себе: Я есть
    Тогда уж просто соберите их все в одном файле в объект и импортируйте объект, зачем так сложно?

    const os = require('os'),
      path = require('path'),
      fs = require('fs'),
      kb = require('../modules/keyboards.js'),
      config = require('../config.js');
    
    module.exports = { os, path, fs, kb, config }
    Ответ написан
    Комментировать
  • Как выбрать уникальные значения из Двух связанных таблиц?

    @dimoff66
    Кратко о себе: Я есть
    Дубли могут получиться только в одном случае: если в blog_category_descriptions есть более одной записи с одинаковыми category_id.

    Вы соединяете таблицы с отношением одна к многим, причём соединяете дважды, соответственно соединения по id перемножатся с соединениями по parent id. Если для id и parent id у вас по две записи в дескрипшинз, то на выходе вы получите четыре записи. Выход делать через union all. Первую таблицу соединяете по id затем union all и соединение той же таблицы по parent id.
    Ответ написан
    2 комментария
  • Что должен знать junior php на 2020 и стоит ли ходить на все собеседования?

    @dimoff66
    Кратко о себе: Я есть
    Люди должны понимать одну простую вещь. Программирование это не то что вы знаете, программирование это способность решать задачи. Если у вас есть эта способность - знания вы приобретете и работу рано или поздно, причем скорее рано чем поздно, найдете. Если нет этой способности - тут как фишка ляжет. Есть умственно отсталые работодатели, которые ставят знания выше способностей к кодированию.

    Просто сделайте сами проект, который вам интересен. Сделайте сайт, который вам интересен. Вы увидите, что на голом PHP писать его долговато, тогда вы попробуете фреймворки, и увидите что фреймворки облегчают и ускоряют написание кода. Да, технологии нужны, так как облегчают жизнь, но изучение их как таковых без реального применения, не сделает вас специалистом. Специалистом вас сделает написание собственного проекта.
    Ответ написан
    Комментировать
  • Как использовать значение промиса, для условия?

    @dimoff66
    Кратко о себе: Я есть
    Значение промиса можно получить либо через await, либо внутри then, вы не можете получить его напрямую, так как он выполняется асинхронно и на момент присвоения
    const mocked = getMockedClient ().then(prop => prop.mockedClient())

    он еще не выполнился, это просто декларация о намерениях.

    То есть либо
    const mocked = await getMockedClient ().then(prop => prop.mockedClient())

    тогда код будет ждать выполнения промиса, перед именем функции, внутри которой используется await нужно поставить async

    либо
    getMockedClient ().then(prop => {
      const mocked = getMockedClient ()
      // И тут делаете с полученным значением что хотите
    })

    Вообще просто почитайте любую статью про промисы в инете, их полно
    Ответ написан
    Комментировать
  • Что означает "array.length -1"?

    @dimoff66
    Кратко о себе: Я есть
    Массив в десять элементов нумеруется с нуля до девяти, поэтому длина минус один.
    Правильно писатьfor (let i = 0; i < arr.length; i ++)
    Ответ написан
    2 комментария
  • Как правильно разбить одну сроку опираясь на другую?

    @dimoff66
    Кратко о себе: Я есть
    Вырезал фигурные скобки в итоге, думаю не нужны, если нужны, то $patterns[] = $m[0];
    И это решение не зависит от того, есть ли в строке пробелы или нет.

    $s1 = 'Lorem {val1} dolor sit {val2}, consectetur adipisicing {val3}.';
    $s2 = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit.';
    
    $patterns = [];
    $pattern2 = preg_replace_callback('|\{([a-z0-9]+)\}|', function($m) use (&$patterns) {
        $patterns[] = $m[1];
        return '(.*)';
    }, $s1);
    
    preg_match('|' . $pattern2 . '|', $s2, $matches);
    $res = array_combine($patterns, array_slice($matches, 1));
    
    var_dump($res);
    Ответ написан
    Комментировать
  • Как запускать и останавливать программу на JS одной кнопкой?

    @dimoff66
    Кратко о себе: Я есть
    addEventListener("keydown", function(eventGo) {
      if (eventGo.keyCode !== 13) return
      if (init===0) {
        // Код запуска
        init=1;
      } else {
        // Код остановки
        init = 0;
      }
    }
    Ответ написан
    1 комментарий
  • Какой язык программирования изучать в свободное время?

    @dimoff66
    Кратко о себе: Я есть
    По моему самый простой - javascript, для бэкенда да, Python
    Но вообще без разницы, на все языки есть спрос. Я вот увлекся scala. Это безумный язык, его создал гений, наверняка он пришел ему свыше во сне. Как первый его использовать может и не стоит, но вторым или третьим вполне себе. Он не сильно популярный но и специалистов по нему немного, так что работу найти реально.
    Ответ написан
    1 комментарий
  • Как эффективно выбирать каждый n элемент массива?

    @dimoff66
    Кратко о себе: Я есть
    Минимум телодвижений, только нужные элементы без перебора всего массива
    const getEvery = (arr, gap) => Array.from(
       { length: Math.floor(arr.length / gap)},
       (_, i) => arr[i * gap + gap - 1] )
    
    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    console.log(getEvery(arr, 3))
    Ответ написан
    4 комментария
  • Как составить регулярное выражение?

    @dimoff66
    Кратко о себе: Я есть
    Поиск всех значений в кавычках

    const str = `
    RAM_smith_T1:0 "Anführer von Amerika"
    RAM_smith_T2:0 "Popular"
    RAM_smith_T3:0 "Suppressor of the Resistance"
    RAM_smith_T4:0 "Folower of the Reich's Orders"
    RAM_smith_T5:0 "Tied by German Oligarchy"
    umc_leader_john_smith_ram_desc:0 ""`
    
    const regExp =  (/:0 "([^"]+)"/ig)
    let found
    while (found = regExp.exec(str)) {
       console.log(found[1])   
    }
    Ответ написан
    Комментировать
  • Как сгенерировать событие onMouseLeave в React?

    @dimoff66
    Кратко о себе: Я есть
    Как вариант:

    1. Добавьте div-у событие onMouseMove, в нем запоминайте координаты мышки
    onMouseMove={e => { this.mouse = { clientX: e.clientX, clientY: e.clientY }} }


    2. В процедуре close Проверяйте координаты и вызывайте disable в случае выхода за них

    const rect = document.querySelector('.Message').getBoundingClientRect()
    if (this.mouse.clientX < rect.left || 
      this.mouse.clientX > rect.right || 
      this.mouse.clientY < rect.top ||
      this.mouse.clientY > rect.bottom) {
      this.disable()
    }


    Строка
    document.querySelector('.Message')

    просто для примера, искать по хорошему надо через ref

    https://codepen.io/dimoff66/pen/zYxBQvo?editors=0010
    Ответ написан
  • Что не так с кодом?

    @dimoff66
    Кратко о себе: Я есть
    Потому что эта строчка не имеет ни малейшего смысла
    arr[i] % 0 +`${s}`+ 0
    Во первых вы пытаетесь получить остаток от деления на нуль вместо двойки, во вторых вы составляете строку, а строка это всегда true, Поэтому все возвращается.
    Я понимаю что вы хотите сделать, но это код, вы не можете составлять код на лету, правильный подход

    function getSameParity(arr){
      const newArr = [];
      let s = arr[0] % 2;
    
      for(let i = 0; i < arr.length; i += 1){
        if(arr[i] % 2 === s){
           newArr.push(arr[i]);
        }
      }
      return newArr;
    }
    
    console.log(getSameParity([3, 6, 7, 8])) // [3, 7]
    console.log(getSameParity([4, 6, 7, 8])) // [4, 6, 8]


    либо короче

    const getSameParity = arr => arr.filter(v => v % 2 === arr[0] % 2)
    Ответ написан
    3 комментария
  • Как вывести вместо ID городов их названия?

    @dimoff66
    Кратко о себе: Я есть
    fetch_assoc() возвращает очередную, в вашем случае первую, строку выборки
    Поэтому переменные $sqlcitygo и $sqlcityin у вас содержат ссылку на города первого трипа. С переменной $trip они никак не связаны и поэтому выдавать верное значение не могут в принципе. Если getTrip выдает результаты запроса, вам нужно сделать соединения в том запросе и поместить имена городов в отдельные поля.
    Ответ написан
    Комментировать
  • Как проверить сколько чисел совпало в строке?

    @dimoff66
    Кратко о себе: Я есть
    let win ='2_6_3_1'   
    let ystring='1_2_3-1'
    
    const count = 
    (values => ystring.split('_').reduce((cnt, v) => cnt + values.has(v), 0)) 
    (new Set(win.split('_')))
    
    console.log(count) // 2
    Ответ написан
    Комментировать
  • Как реализовать частично оплаченные счета в структуре базы?

    @dimoff66
    Кратко о себе: Я есть
    Сделать таблицу оплат
    payments: id, date, invoice_id, sum
    В ней будут отражаться оплаты по счету

    Статус по счету получать либо динамически в запросе, сравнивая сумму счета с суммой оплат по нему, либо высчитывать при оплате и ставить в поле таблицы счетов. not_payed, payed_partially, payed_fully
    Ответ написан
    1 комментарий
  • Как вам такое решение задачки?

    @dimoff66
    Кратко о себе: Я есть
    Немного кривоватое на мой взгляд, я бы сделал так

    const range = arr => arr
       .sort((a, b) => a - b)
       .reduce((agg, v) => {
          const currRange = agg[agg.length - 1]
          if (!currRange || v > currRange.last + 1) {
             agg.push({first: v, last: v})
          } else {
             currRange.last = v
          }
          return agg
       }, [])
       .map(v => v.first + (v.first !== v.last ? '-' + v.last : '')).join()
    Ответ написан
    Комментировать
  • Регулярное выражение с десятичными в диапазоне?

    @dimoff66
    Кратко о себе: Я есть
    ([1-9]\d|[3-9])\d+([.,]\d+)?
    Ответ написан
    Комментировать
  • Python или JS: что всё-таки изучать?

    @dimoff66
    Кратко о себе: Я есть
    - Учитель, скажи, жениться мне или нет?
    - Женись.
    - Спасибо, Учитель.
    - Или не женись.
    - ???
    - В обоих случаях пожалеешь.

    PS Подобные вопросы возникают каждый божий день, ответ на них один: при изучении любого более менее популярного языка вы найдете работу, если у вас есть задатки к программированию. Нет никакой разницы, все востребовано. Программистов не хватало, не хватает и не будет хватать до той поры пока ИИ не станет писать программы сам.
    Ответ написан
    1 комментарий