Задать вопрос
  • Как сгруппировать 2 массива?

    @dimoff66
    Кратко о себе: Я есть
    Собираете все в объект, попутно складывая цены, а потом из него получаете массив ключей и массив значений

    const obj = name.reduce((agg, v, ind) => {
      agg[v] = (agg[v] || 0) + price[ind]
      return agg
    }, {})
    
    const nameNew = Object.keys(obj)
    const priceNew = Object.values(obj)


    или слабочитаемый, но зато однострочный вариант с lodash

    const [nameNew, priceNew] = 
      _.unzip(
        _.toPairs(
          _.groupBy(
            _.zip(name, price).map(([name, price]) => ({ name, price })), 
            'name'
          )
        ).map(([name, prices]) => [name, _.sumBy(prices, 'price')])
      )
    Ответ написан
  • Как настроить JS-цикл в pagination?

    @dimoff66
    Кратко о себе: Я есть
    1. Собирать года в массив вам не нужно, достаточно пары переменных, чтобы хранить максимальный год и минимальный(maxYear и minYear), и переменной, например currentYear, которая будет хранить первый год для показа.

    2. Создайте функцию, которая заполнит ваши ссылки с годами начиная с currentYear, заканчивая currentYear + 2

    3. К ссылкам пагинации приделайте событие onclick, по которому вызывайте функцию, передавая ей параметр шага (-1 для лево, +1 для вправо, ну или большие шаги), эта функция поменяет значение currentYear и вызовет функцию заполнения.

    Мне конечно же проще было бы написать код, но для вас будет лучше если вы решите хотя бы техническую часть задачи самостоятельно
    Ответ написан
    1 комментарий
  • Как создать Route с путём, зависящем от просов переданных в компонент роута?

    @dimoff66
    Кратко о себе: Я есть
    Внутри компонента читаете пропсы и делаете редирект например через window. location
    Ответ написан
    Комментировать
  • Как работает террарный оператор в PHP??

    @dimoff66
    Кратко о себе: Я есть
    echo "" == null; // true

    При использовании ?? проверяется условие

    echo "" === null; // false

    то есть строгое равенство первого аргумента значению null, а не просто пустое значение
    Ответ написан
    Комментировать
  • Как в React лучше делать функционал, общий для компонентов страниц?

    @dimoff66
    Кратко о себе: Я есть
    В данном случае нет никакого смысла, проще функции редиректа объявить в отдельном файле и вызывать с передачей props. Все же постепенно разработка переходит на хуки, то есть на чистые функции без классов.

    componentDidMount() {
      redirectIfNotLoggedIn(props);
      redirectIfNoAdministratorPrivileges(props);
    }
    Ответ написан
    1 комментарий
  • Как отсортировать массив объектов по свойству с учетом того что свойство не в каждом объекте присутствует?

    @dimoff66
    Кратко о себе: Я есть
    Для быстроты, чтобы не делать лишних сортировочных телодвижений я бы сделал
    let [withAge, withoutAge] = users.reduce((agg, v) => {
      agg['age' in v].push(v)
      return agg
    }, [[], []])
    const sorted = [...withAge.sort((a, b) => a.age - b.age), ...withoutAge]


    или более кратко с использованием библиотеки lodash

    let [withoutAge, withAge] = _.partition(users, ({ age }) => age)
    const sorted = [..._.sort(withAge, 'age'), ...withoutAge]

    Хотя это будет не сортировка на месте, как при стандартном sort, Но не думаю что это принципиально
    Ответ написан
    4 комментария
  • Как получить элемент-родитель?

    @dimoff66
    Кратко о себе: Я есть
    Метод Element.closest() возвращает ближайший родительский элемент (или сам элемент), который соответствует заданному CSS-селектору или null, если таковых элементов вообще нет.

    https://developer.mozilla.org/ru/docs/Web/API/Elem...

    В вашем варианте можно использовать

    const farest (element, selector, secondCall) {
      const parent = element.closest(selector)
      return parent ? farest(parent, selector, true) : secondCall && element
    }
    Ответ написан
    4 комментария
  • Как побороть сонливость и апатию в течение дня?

    @dimoff66
    Кратко о себе: Я есть
    В фильме Бойцовский клуб подробная двухчасовая инструкция что делать в таких случаях. Поможет проект Разгром.
    Ответ написан
    Комментировать
  • Когда нужно ставить return, а когда нет?

    @dimoff66
    Кратко о себе: Я есть
    const arrowFuncSquare = (param) => param * param 
    // Не нужен return, стрелочная однострочная функция без фигурных скобок
    
    const arrowFuncSquare2 = (param) => {  
      if (param) return param * 2 
      else return param
    } // Нужен return, потому что фигурные скобки
    
    const addTime = param => {
      param.createdAt = moment()
      param.updatedAt = moment()
    } // Не нужен return, потому что функция не возвращает значения
    
    const addTime = param => {
      if (param.timeless) return
    
      param.createdAt = moment()
      param.updatedAt = moment()
    } // Нужен return чтобы при определенном условии прерывать выполнение кода функции
    Ответ написан
    6 комментариев
  • Как получить сумму в отфильтрованном массиве?

    @dimoff66
    Кратко о себе: Я есть
    Самый короткий код:
    arr.reduce((a, v) => a + v.bet * !(v.num - 1), 0)
    Ответ написан
    Комментировать
  • Как сделать onclick в electron.js(либо node.js)?

    @dimoff66
    Кратко о себе: Я есть
    Если используете чистый Html, то пишите onclick, все буквы строчные. Если используется jsx, то пишите onClick={...здесь вызов функции или ссылка на саму функцию }
    Ответ написан
  • Ошибка при маршрутизации?

    @dimoff66
    Кратко о себе: Я есть
    Перевод: вместо валидного jsx вы где-то вернули обычный объект. Строка где вы это сделали указана - div (at link.js:7) Поставьте точку останова в этом месте и посмотрите что у вас туда возвращается.
    Ответ написан
  • Как правильно надежно хешировать пароли, стоит ли использовать bcrypt?

    @dimoff66
    Кратко о себе: Я есть
    Статей огромное количество по поводу систем хэширования. Если кратко то Bcrypt на сегодняшний день будет наиболее надежным решением.
    Ответ написан
    Комментировать
  • Как подгружать данные из 1С упп в приложение сделанное на windowsAppForm?

    @dimoff66
    Кратко о себе: Я есть
    Это можно сделать двумя способами:
    1) Через com-соединение. (в интернете примеры есть)
    2) Через публикацию вэб-сервиса со стороны 1С.

    Но в обоих случаях вам скорее всего понадобится помощь программиста 1С, который разобрался бы в структуре необходимых вам данных и написал вам как делать запросы. Таблиц в УПП много, есть всякого рода тонкости, которых вы можете не предусмотреть и данные будут неполные.
    Ответ написан
    5 комментариев
  • Что не стоит хранить в store redux?

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

    @dimoff66
    Кратко о себе: Я есть
    В этом месте в компоненте CardList обрывается передача handler-а

    {props.cards.map(card => <CardStructure {...card} />)}


    Нужно в CarfStructure передать handler из props
    Ответ написан
    Комментировать
  • Как правильно преобразовать код в es5?

    @dimoff66
    Кратко о себе: Я есть
    forEach лаконичнее всего заменять конструкцией for... of..., в действительности если forEach используется для готового кода и в нее не передается переменная, содержащая ссылку на функцию, то всегда красивее использовать for..of, так как она позволяет прерывать цикл при необходимости и в принципе выглядит более опрятно что ли
    Ответ написан
    Комментировать
  • Есть ли резон идти в JS разработку?

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

    @dimoff66
    Кратко о себе: Я есть
    Характеристики относятся к товарам? То есть у одного товара только один набор характеристик или один товар может приходить и продаваться с разными наборами характеристик, например кроссовки адидас, цвет: Белый, размер: 37 и кроссовки адидас, цвет: Синий, размер: 39. Если второй, более сложный случай, то делаем следующие таблицы

    1) Таблица Properties (id, name, valueType) - здесь просто храним список возможных свойств
    2) Таблица PropertyValues (id, propertyId, value) - здесь храним возможные варианты значений для свойств, у которых не простой тип, то есть не строка, не число, не булево, не дата
    3) CharacteristicsSet (id, productId, name) - здесь будет храниться набор свойств для конкретной позиции товара на складе, name будет составляться автоматически как строка из свойств и их значений, указанных для позиции товара
    4) CharacteristicsValues (chartacteristicSetId, propertyId, valueType, value) - здесь будут храниться значения свойств для конкретной характеристики.

    Например нам пришли партии кроссовок со свойствами цвет: белый, размер: 37й и цвет: синий, размер: 39й. (например 100 и 50 штук соответственно)

    Тогда наши таблицы будут выглядеть следующим образом:

    Properties:
    id: 1, property: 'Цвет', valueType: 'set'
    id: 2, property: 'Размер', valueType: 'number'

    PropertyValues:
    id: 1, propertyId: 1, value: 'Белый'
    id: 2, propertyId: 1, value: 'Красный'
    id: 3, propertyId: 1, value: 'Синий'

    CharacteristicsSet:
    id: 1, productId: 777, name: 'Цвет: белый, размер: 37'
    id: 2, productId: 777, name: 'Цвет: синий, размер: 39'

    CharacteristicsValues
    chartacteristicSetId: 1, propertyId: 1, valueType: set, value: 1(ссылка на белый цвет)
    chartacteristicSetId: 1, propertyId: 2, valueType: number, value: 37
    chartacteristicSetId: 2, propertyId: 1, valueType: set, value: 2(ссылка на синий цвет)
    chartacteristicSetId: 2, propertyId: 2, valueType: number, value: 39

    Ну и в таблице склада можно будет хранить записи в виде:
    productId: 777, characteristicsSetId: 1, quantity: 100
    productId: 777, characteristicsSetId: 2, quantity: 50

    Если же различный набор свойств для одного товара нам не нужен, то все то же самое, но обходимся без таблицы CharacteristicsSet: а в CharacteristicsValues ссылаемся на сам товар. Соответственно весь поиск будет проходить по одной таблице CharacteristicsValues с индексированными полями. Например чтобы найти любые товары с цветом Белый, мы делаем поиск

    select * from CharacteristicsValues where propertyId = 1 and value = 1


    ну и с соответствующим соединениям по таблицам характеристик и(или) товаров
    Ответ написан
    Комментировать
  • Выбор дополнительного ЯП?

    @dimoff66
    Кратко о себе: Я есть
    Получил огромное удовольствие от изучения scala - очень прикольный язык. Вакансий по нему немного, но и специалистов мало, так что шансы найти работу есть.
    Ответ написан
    Комментировать