• Можно ли в запросе SELECT к одной таблице так же получить информацию о существовании записи в другой таблице?

    @dimoff66
    Кратко о себе: Я есть
    select table1.*, IF(table2.id IS NULL, 0, 1) as existsInTable2  from table1 
    left join table2 on table2.id = table1.id
    where table1.id = 1
    Ответ написан
    7 комментариев
  • Так что такое асинхронность?

    @dimoff66
    Кратко о себе: Я есть
    Как синхронный однопоточный язык вообще может асинхронно выполнять задачи ?


    В реальности он выполняет их поочередно, просто т.н. асинхронные операции, например промисы, выполняются не в общей очередности написанного кода, а ставятся в общую очередь и выполняются после того как выполнены синхронные операции.

    Например
    function fetchMe() {
      fetch("/api/get").then(response => console.log("Сервер ответил " + response))
      console.log("Ждем ответа сервера")
    }


    Первая строчка асинхронная, она не выполняется сразу а ставится в очередь. Вторая строчка выполняется сразу.

    То что делает fetch - просто регулярно проверяет(в порядке общей очереди событий) ответил ли сервер и когда сервер ответил - выполняется код в then. Причем поскольку js синхронный, то если перед получением ответа сервера будет какая-то затратная операция, fetch будет терпеливо ждать и ответ вы получите не тогда, когда он реально пришел, а когда выполняемая функцией fetch периодическая проверка дождется своей очереди. Это и есть асинхронность в js.
    Ответ написан
    Комментировать
  • JavaScript поиск с динамическими параметрами?

    @dimoff66
    Кратко о себе: Я есть
    const data = [
      {"prop":{"color":{"value":10},"diametr":{"value":15},"size":{"value":2}},"name":"результат 1"},
      {"prop":{"color":{"value":15},"diametr":{"value":17},"size":{"value":8}},"name":"результат 2"},
      {"prop":{"color":{"value":19},"diametr":{"value":17},"size":{"value":8}},"name":"результат 3"}
    ]
    
    const search = filter => 
      Object.entries(filter).reduce((agg, [key, value]) => 
        agg.filter(v => v.prop[key].value === value)    
      , data)
    
    
    console.log(search({ size: 8 }).map(v => v.name)) // ["результат 2", "результат 3"]
    console.log(search({ size: 8, color: 15 }).map(v => v.name)) // ["результат 2"]
    Ответ написан
    1 комментарий
  • JS Конвертация долара в евро?

    @dimoff66
    Кратко о себе: Я есть
    const convert = (amount, currFrom, currTo) => amount * currencyFrom / currencyTo
    Ответ написан
    Комментировать
  • Как Frontend разработчику войти в Backend (переквалифицироваться)?

    @dimoff66
    Кратко о себе: Я есть
    Бэкенд это в основном чтение данных из БД и отдача на клиент. Если на клиенте не SPA и на бэке нужно формировать полноценный html - чуть посложнее, нужно будет изучить используемый выбранной системой шаблонизатор. Все остальное - то же что фронтенд в плане работы с данными. Поэтому читайте про БД и язык запросов SQL, делайте простенькие базы с 3-4 таблицами. Пробуйте получать запросы с клиента и отдавать информацию. Ничего сильно сложного. Несмотря на то, что программисты бэкенда любят гнуть пальцы и называть фронтендщиков формошлепами, современный фронтенд мне кажется сложнее бэкенда.
    Ответ написан
  • Как посчитать ключи объекта у которых есть определенное значение поля?

    @dimoff66
    Кратко о себе: Я есть
    Ваш код просто чемпион по количеству нелепостей, count используете и как счетчик и как переменную при итерации, сравниваете значение объекта Permissions со строкой зачем-то.

    Верный код по вашему алгоритму:

    let Permissions = {canView: "True", canEdit: "False", canPrint: "True"};
    function Count() {
      let count = 0;
      for (let elem of Object.values(Permissions)) {
        if (elem === "True") count++;
      }
      alert(count);
    }


    Но проще

    const Permissions = {canView: "True", canEdit: "False", canPrint: "True"};
    const count = Object.values(Permissions).filter(v => v == "True").length
    alert(count)


    И переменные в js принято всегда писать с маленькой буквы (фиг знает почему, мне больше нравится майкрософтовский стиль, но принято так)
    Ответ написан
    Комментировать
  • Проверка столкновение с объектам(walls)?

    @dimoff66
    Кратко о себе: Я есть
    const checkIntersection = (obj1, obj2) => 
      (
        (obj1.x >= obj2.x && obj1.x <= obj2.x + obj2.w) // левая сторона первого объекта в границах второго
        ||  // или 
        (obj2.x >= obj1.x && obj2.x <= obj1.x + obj1.w)  // левая сторона второго объекта в границах первого
      )
    
      &&
    
      (
        (obj1.y >= obj2.y && obj1.y <= obj2.y + obj2.h) // верхняя планка первого объекта в границах второго
         ||  // или 
        (obj2.y >= obj1.y && obj2.y <= obj1.y + obj1.h) // верхняя планка второго объекта в границах первого
      )
    Ответ написан
  • Как попасть на интервью или как найти работу Python junior/intern разработчиком?

    @dimoff66
    Кратко о себе: Я есть
    Вы даете ссылку на сайты, словно устраиваетесь дизайнером. Дайте ссылку на написанный вами код, выделите эту ссылку. Никому не интересно как выглядит сайт, интересно какой вы пишете код.

    Я бы убрал упоминания о курсах, поскольку прохождение курсов как ни парадоксально, обесценивает ваши проекты, поскольку ясно, что на курсах вам помогали. Сделайте простенький интернет магазин, выложите его, сделайте на нем акцент в резюме и не упоминайте что весь ваш опыт состоит только из курсов, напишите что полгода делали аутсорсные проекты.

    Никому не интересно какие вы проходили курсы и на каких лекциях присутствовали, интересно что вы реально умеете.
    Ответ написан
    Комментировать
  • Как добавить в массив значения через for?

    @dimoff66
    Кратко о себе: Я есть
    Все куда проще

    let data = ['Zna4', 'Zna4', 'Zna4'];
    let people = ["Tom", "Alice", "Sam"];
    
    data['image'] = people


    С той поправкой, что data перестает быть итерируемым числовым массивом и становится объектом со строковыми ключами.
    Ответ написан
    1 комментарий
  • Учу JavaScript, дальше - Vue.js, среднее знание PHP. На чем сделать CRUD-систему?

    @dimoff66
    Кратко о себе: Я есть
    Получайте удовольствие от того, что вам нравится делать сейчас. Будущее есть только у людей, кому нравится их работа, если вы выбираете то, что по чьим-то прогнозам будет популярнее в будущем, вы всю жизнь будете переживать, вам всегда будет казаться что в соседней кассе очередь движется быстрее. Не ввязывайтесь в эти гонки, просто делайте что вам нравится, работа на всех найдется.
    Ответ написан
    Комментировать
  • Почему не меняется состояние компонента в React?

    @dimoff66
    Кратко о себе: Я есть
    Строчка
    todo.completed = !todo.completed
    выполняется при каждом клике дважды, поэтому сначала значение становится false, затем снова true, в то время как текстовая переменная прекрасно меняется. Мне немного стыдно, поскольку точно не знаю механизм работы реакта в данном случае, но выхода тут два:
    1)
    if (todo.id === id) return { ...todo, completed: !todo.completed }
    return todo


    Что в действительности более правильно, так как каждый изменяемый элемент в реакте должен менять ссылку при изменении.

    2) Вычислять новый completed сразу
    onChange={() => props.handleChange(props.item.id, !props.item.completed)}


    и уже в функции пользоваться полученным значением
    handleChange(id, newCompleted) {
          this.setState(prevState => {
            
              const updatedTodos = prevState.todos.map(todo => {
                  if (todo.id === id) {
                    todo.completed = newCompleted 
                  }
                  return todo
              })
              return {
                  todos: updatedTodos
              }
          })
    Ответ написан
    6 комментариев
  • Как обратиться к span, который лежит в li?

    @dimoff66
    Кратко о себе: Я есть
    const selector = "li.volga span"
    const txt = "волга" 
    const elem = Array.from(document.querySelector(selector)).find(v => v.innerText.includes(txt))
    Ответ написан
    Комментировать
  • Как на javascript сделать древовидную структуру массива из массива из трёх полей id, name, parent?

    @dimoff66
    Кратко о себе: Я есть
    Всего пару строчек кода, которые при желании можно и в одну соединить в ущерб наглядности

    const map = Object.assign({} , ...arr.map(v => 
      ({ [v.id]: Object.assign(v, { children: [] }) })
    ))
    
    const tree = Object.values(map).filter(v => 
     !(v.parent && map[v.parent].children.push(v))
    )
    Ответ написан
  • Как исправить код?

    @dimoff66
    Кратко о себе: Я есть
    По моему все очень очевидно. Он вам пишет о том, что в функции overwritePermissions он ожидает массив или коллекцию Permission Overwrites, а вы подсовываете что-то другое. Проверьте что у вас в переменной muterole, возможно надо написать что-то вроде channel.overwritePermissions(muterole.permissions,
    Ответ написан
  • Почему не изменяется state при использовании хука useState?

    @dimoff66
    Кратко о себе: Я есть
    В коде
    1) onAddBtn ни откуда не вызывается, повесьте ее на кнопку с плюсом на событие onClick, чтобы она срабатывала
    2) isAdding никуда не выводится, как вы узнаете, что она не срабатывает?

    Если повесить ее на кнопку и вывести результат, то окажется, что все замечательно меняется
    Ответ написан
  • Почему стейт чекбокса обновляется таким образом?

    @dimoff66
    Кратко о себе: Я есть
    Потому что rejectedStatuses содержит состояние на момент последнего рендеринга. Оно не может измениться от вызова setRejectedStatuses ну хотя бы потому что это константа. А вы проверяете его значение немедленно после вызова функции установки, словно константа раз и поменяется. Оно поменяется при следующем вызове функции компонента, то есть после рендеринга, вызванного сменой состояния.
    Ответ написан
    Комментировать
  • Как вложенные массивы объединить в один при совпадении id в родительских объектах?

    @dimoff66
    Кратко о себе: Я есть
    const mapIds = {}
    const filtered = array.filter(elem => {
      const existingElement = mapIds[elem.id]
      if (!existingElement) 
        mapIds[elem.id] = elem
      else  
        existingElement.array1.push(...elem.array1)
    
      return !existingElement
    })


    Либо если выпендриться с filter в одну строчку, то

    const mapIds = {}
    const filtered = array.filter(elem => 
      (!mapIds[elem.id] && (mapIds[elem.id] = elem)) || !mapIds[elem.id].array1.push(...elem.array1)
    )
    Ответ написан
    6 комментариев
  • Как сократить вот этот код?

    @dimoff66
    Кратко о себе: Я есть
    for (const input of document.querySelectorAll('input'))
      input.addEventListener('input', функция)
    Ответ написан
    1 комментарий
  • Как в React правильно реализовать удаление элемента?

    @dimoff66
    Кратко о себе: Я есть
    Модалку вывести на уровень App, одной модалки на приложение достаточно, по нажатии на кнопку ее активируете.
    Ответ написан
    Комментировать
  • Как устроиться на начальную должность в веб?

    @dimoff66
    Кратко о себе: Я есть
    Я при первом трудоустройстве года три назад написал интернет магазин на Ларавеле: книги по категориям, отбор при клике на категорию. Добавление, удаление. Корзина. Статистика продаж. У меня это заняло четыре дня, у вас возможно пару недель.

    Не знаю насколько внимательно работодатели смотрели сделанное. На одном из собеседований, после которого я получил первый оффер - о проекте в портфолио не спрашивали вовсе, им достаточно было собеседования и лив кодинга. Там, куда я в итоге устроился, спросили как долго я делал этот проект.
    Ответ написан
    Комментировать