Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как добавить элементам массива свойства в зависимости от условия?

    @justmavi
    Software Development Engineer at Softconstruct
    const filteredArray = array.map((item) => {
      if (condition1) position = 'value1';
      else if (condition2) position = 'value2';
      // ...
     
      return item;
    }
    Ответ написан
    Комментировать
  • Как перейти из строки в обьект?

    @justmavi
    Software Development Engineer at Softconstruct
    Достать значение свойства объекта по пути можно через метод get из lodash. Но конкретно в данном случае есть проблемы.

    Если глобальный скоп, то с использованием var вместо let & const можно быстро решить.

    var object = {
         method: {
              method:  () => console.log('123123')
        }
    }
    
    let string = 'object.method.method'
    const method = _.get(window, string);


    Подробнее о get - https://lodash.com/docs/4.17.15#get

    Если локальный скоп, то можно сохранить созданный объект в this и потом через него обращаться:

    function fn() {
      const object = {
           method: {
                method:  () => console.log('123123')
          }
      }
    
      this.object = object;
    
      let string = 'object.method.method'
      const method = _.get(this, string);
    }


    Если lodash не хочется юзать, то вот код:

    function getNestedValue(object, path) {
        path = path.replace(/\[(\w+)\]/g, '.$1'); // конвертация индексов в свойства
        path = path.replace(/^\./, '');           // удаление лишних точек
        
        const parts = path.split('.');
        
        for (const key of parts) {
            if (typeof object === 'object' && !(key in object)) return;
            
            object = object[key];
        }
        
        return object;
    }
    
    console.log(getNestedValue(window, 'object.method.method'));
    Ответ написан
    Комментировать
  • Передавать "request" в сервис - плохая практика?

    @justmavi
    Software Development Engineer at Softconstruct
    Можно инжектировать объект запроса в конструкторе

    import { Inject } from '@nestjs/common';
    import { REQUEST } from '@nestjs/core';
    
    @Injectable()
    export class SessionService {
      constructor(@Inject(REQUEST) private readonly req: Express.Request) {};
    
      write(userId: number) {
        this.req.session.userId = userId;
      }
    
      read() {
        return this.req.session.userId;
      }
    }


    Но вашу проблему можно легко решить через guard'ы.
    Ответ написан
    Комментировать
  • Как создать кнопку по которой будет скачиваться txt файл с историей переписки Node Js?

    @justmavi
    Software Development Engineer at Softconstruct
    res.setHeader("Content-Type", "text/plain");
    res.setHeader("Content-Disposition", "attachment; filename=test.txt");
    res.send(obj);
    Ответ написан
    Комментировать
  • Почему рекурсия начинает идти в обратную сторону?

    @justmavi
    Software Development Engineer at Softconstruct
    Так. В первую очередь, изучайте, что такое стек вызовов (call stack).
    Call stack можно рассматривать как коробку книг, куда можно положить сколько угодно книжек, но читать можно книгу, которая лежит поверх всех книг. Как закончим читать, можем достать уже следующую и так до конца. Работает он по принципу LIFO (Last In First Out, последним пришел - первым ушел).
    Когда функция вызывается, она создает запись в стеке вызовов, в которой лежат её аргументы и локальные переменные. Эту запись называют stack frame (стековый кадр). Когда функция вызывает другую функцию, в call stack вставляется новый кадр, уже поверх старого. Как только эта функция заканчивает свою работу, запись из стека удаляется и следующая функция продолжает свою работу и в конце её фрейм тоже удаляется.
    В общем, эту тему можно очень глубоко изучать в интернете.

    У вас функция работает так:
    Изначально вы выводите число в консоль, потом рекурсивно вызываете эту функцию в блоке else с аргументом num -1, дальше снова выводите это число в консоль. То есть, вы выводите каждое число по два раза, но поскольку рекурсия забивает call stack, у вас получается такой "странный" вывод. Уберите console.log из else и картинка поменяется.
    Ответ написан
    Комментировать
  • Как преобразовать строку в число в formData?

    @justmavi
    Software Development Engineer at Softconstruct
    Можно отправить объект через JSON.stringify() и парсить обратно в объект на стороне сервера через JSON.parse().
    Ответ написан
    Комментировать
  • Можно ли пропустить null?

    @justmavi Автор вопроса
    Software Development Engineer at Softconstruct
    Решение

    const validConditions = {
        $and: [
          {
            $or: [
              { 'conditions.age': { $exists: false } },
              { 'conditions.age': 20 },
            ],
          },
          {
            $or: [
              { 'conditions.name': { $exists: false } },
              { 'conditions.name': 'John' },
            ],
          },
          {
            $or: [
              { 'conditions.surname': { $exists: false } },
              { 'conditions.surname': 'White' },
            ],
          },
        ],
      };
    
      const result = await Test.find(validConditions);


    Хватило просто составлять запрос для SQL...

    SELECT * FROM entries WHERE age = 20 OR age IS NULL AND name = 'John' OR name IS NULL AND surname = 'White' OR surname IS NULL
    Ответ написан
    Комментировать