• Как вытащить значение по ключу из вложенного объекта?

    @slide13
    frontend/web-developer
    usersList.forEach(user => console.log(user.company.name))
    Ответ написан
    Комментировать
  • Как с помощью рекурсии преобразовать массив?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Не надо никакой рекурсии:

    arr.map((n, i, a) => a.slice(0, i + 1).join(''))
    // или
    arr.reduce((acc, n) => (acc.push((acc.at(-1) ?? '') + n), acc), [])

    Но, конечно, если очень хочется, то

    (function xxx(arr, str = '') {
      if (str.length === arr.length) {
        return [];
      }
    
      const newStr = str.concat(arr[str.length]);
      return [ newStr, ...xxx(arr, newStr) ];
    })(arr)
    Ответ написан
    1 комментарий
  • Какая разница между array и ...array?

    Grapeoff
    @Grapeoff
    В чём концепция...?
    ... - spread/rest оператор.

    Оператор spreadраскрывает массив в список аргументов, но также например можно использовать для расширения массивов.

    const arr = [1, 2, 3]
    func.apply(...arr) // [1, 2, 3] -> 1, 2, 3

    const arr = [1, 2, 3]
    const arr2 = [...arr, 4, 5]

    По сути он превращает массив в последовательность через запятую.

    rest наоборот собирает аргументы в массив.

    function func(...args) {
         for (let arg of args) console.log(arg)
    }

    Кстати, это работает и для объектов:

    const obj = {a: 10, b: 20}
    const obj2 = {...obj} // {a: 10, b: 20}
    Ответ написан
    1 комментарий
  • Почему return /^[A-Za-z0-9].{8,}/.test('Passw0rd'); возвращает false?

    Aetae
    @Aetae
    Тлен
    Точка лишняя.
    Сейчас у тебя возвращает false если первый символ не [А-Za-z0-9] или любых символов после первого меньше 8.
    Учи регекспы. Писать научиться их просто, куда проще чем читать и\или пытаться комбинировать.)
    Ответ написан
    Комментировать
  • Как правильно обратиться в CSS к внутреннему тегу иконки svg?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    У вас один мелкий недочет: вы обращаетесь к svg, будто это дочерний элемент инпута с классом form-control. Синтаксис должен быть такой:
    .form-control:focus + .account__icon g {
      opacity: 1;
    }
    Ответ написан
    1 комментарий
  • Где искать нормальных менторов?

    @daryada
    solvery.io
    tolk-talk.ru
    Ответ написан
    Комментировать
  • Как работает этот отрезок кода?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.

    Так не работает
    return digits.splice(0,0,1)

    Ну так почитайте что метод splice возвращает. Либо в консоли поупражняйтесь. Само собой не работает.
    Ответ написан
    2 комментария
  • Почему GitHub Desktop игнорирует gitignote?

    *.log
    Такая запись исключит файлы из корневого каталога

    **/*.log
    Такая запись исключит файлы из всех каталогов, рекурсивно

    Подробнее https://git-scm.com/docs/gitignore#_pattern_format
    Ответ написан
    4 комментария
  • Как защититься от двойного списания в многопоточном приложении?

    @rPman
    Блокировку во время траты уже сказали, но бывает что процесс может длиться достаточно долго, чтобы пользователь в соседнем окошке не смог совершить параллельно оплату (у него будет все висеть), поэтому блокировки реализуют программно

    Добавь к аккаунту пользователя поле lockedBalance, в начале транзакции покупки добавляй к этому значению нужную сумму для траты (а по окончанию эту же вычитай как от сюда так и из общего баланса), соответственно итоговый баланс при проверке считай из разницы основного баланса и этого блокированного. Если транзакция сфейлится, это придется отслеживать, заблокированный баланс так же уменьшай на сумму сделки но не трогай общий.

    более красиво, вместо одного поля, заводи специальную таблицу - текущие сделки, где в соответствии со статусом вычисляй этот заблокированный баланс (статусы сделка начата, сделка совершена или сделка обломилась), это актуально как раз на тот случай, когда сделка совершается достаточно долго чтобы не проводить ее в пределах транзакции базы данных (а то попадет пользователь на момент обслуживания к примеру перезапуск бд на обновление, и его транзакция пропадет), к тому же эта таблица у тебя уже точно есть, только статусов побольше добавить
    Ответ написан
    Комментировать
  • Паттерн для строки "[a][1][b][2]" как должен выглядеть?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    const str = "[a][1][b][2]";
    console.log(str.substr(1, str.length - 2).split('][')); // ['a', '1', 'b', '2']


    const str = "    [a]  [1]       [b]      [2]       ".trim();
    console.log(str.substr(1, str.length - 2).split(/\]\s*\[/)); // ['a', '1', 'b', '2']
    Ответ написан
    4 комментария
  • Как указать имя передаваемого параметра при вызове функции?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Деструктурировать – непередеструктурировать:
    можно задать сразу значения по умолчанию, да и сигнатура читабельнее:
    function test({ a = "Aa", b = "bar", c = "Цеце" }) {
      console.log({a, b, c});
    
      // что-то делаем с переменными a, b, c:
      console.log(`${a} ${c} пошла в ${b}`);
    }
    
    test({ a: "100" });  //    { a: "100", b: "bar", c: "Цеце" }
    // 100 Цеце пошла в bar
    Ответ написан
    Комментировать
  • Разница CompareTo() в IComparable и Equals() в IEquatable?

    Nipheris
    @Nipheris Куратор тега C#
    IComparable предназначен для установления отношения порядка между объектами, реализующими этот интерфейс, ну или грубо говоря, для сортировки. Т.е. когда для двух данных объектов А и Б вы можете утверждать, что А < Б ИЛИ А == Б ИЛИ А > Б.

    IEquatable предназначен для установления отношения равенства. Когда для двух данных объектов А и Б вы можете утверждать, что А == Б или А != Б.

    Далеко не для всех типов данных вы хотите и можете устанавливать отношение порядка, в то время как для большинства типов с value-семантикой вы захотите иметь отношение равенства/неравенства. Это настолько частая и необходимая вещь, что записи в C# автоматически реализуют для вас IEquatable.
    Ответ написан
    1 комментарий
  • Как узнать версию windows, если в заголовках и системе они разные?

    vabka
    @vabka
    Токсичный шарпист
    1. А зачем?
    2. Никак, тк в заголовке может идти буквально что угодно.
    3. Заголовок в этом случае вполне правдив, и говорит, что у тебя NT 6.1 - это и есть win7
    Ответ написан
    2 комментария
  • Есть ли библиотеки JS для синтеза речи?

    vabka
    @vabka
    Токсичный шарпист
    Что значит "хорошее качество"?
    Синтез силами ОС будет считаться?
    Если да, то в браузере есть встроенное API для синтеза речи:
    https://developer.mozilla.org/ru/docs/Web/API/Web_...

    Если хорошее качество - на уровне Яндекса, то нет, и быть не может.
    Ответ написан
    Комментировать
  • Где на Windows имеет смысл хранить приватные SSH-ключи?

    karabanov
    @karabanov
    Системный администратор
    Храни приватный ключ, где хочешь, в любом безопасном по твоему мнению месте, только не выноси его за пределы машины на которой он был сгенерирован и никому не показывай.
    Только при подключении надо будет указывать путь до приватного ключа, но ssh-agent помогает решить эту задачу.
    Ответ написан
    Комментировать
  • Где на Windows имеет смысл хранить приватные SSH-ключи?

    vabka
    @vabka
    Токсичный шарпист

    Если по каким-то техническим причинам ключи нужно хранить именно в этой директории, значит объяснение этой причины будет зачётным ответом на этот вопрос.

    Это стандартная директория, с которой работает openssh.
    И вроде нет никаких способов её переназначить.
    Аналогично и в других ОС.


    2. Добирать до папки .ssh не очень удобно, да и смысл её имени неочевиден.

    ~/.ssh - это не очевидно?
    В ней хранится всё что относится к ssh конкретного пользователя: ключи и доверенные хосты


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

    Когда генеришь ключ - можно указать пароль, тогда злоумышленники ничего не смогут сделать с твоими ключами.

    2. Добирать до папки .ssh не очень удобно, да и смысл её имени неочевиден.

    Вкусовщина и непонимание используемых инструментов.
    Добираться до неё нужно полтора раза в жизни, чтобы написать
    cat ~/.ssh/id_rsa.pub
    Ввиду этой логики, я думаю что можно на диске `D` (или другом несистемном) создать папку `SSH Private Keys` (или даже по-русски - `Приватные ключи SSH`) и хранить их там. Единственное, при наличии нескольких пользователей необходимо ограничить доступ к этой папке.

    Почему бы тогда программы устанавливать не в "C:\Program files", а в "D:\Все программы"?
    Вот мне неочевидной кажется идея хранить публичные ключи в папке "D:\Приватные ключи SSH" тем более на русском языке.

    Если боитесь, что при выходе диска из строя, вы потеряете ключи, то да - вы их потеряете.
    Можете сделать резервные копии на несколько внешних носителей.
    Хотя не вижу в этом большой проблемы - всегда можно сгенерить новые и прописать заново на серверах.
    Ответ написан
    Комментировать
  • Как дотянутся до внутриник полей проксируемого объекта?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Прокси очевидно проксирует только один конкретный объект. Если надо проксировать и содержимое - перехватывай get и отдавай тоже Proxy.
    Ответ написан
    Комментировать
  • Объединяет ли браузер два одинаковых эвента в один?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    // с заглавных букв ниже — сущности, которые стоит различать:

    Событие (Event) и Слушатель события (Listener) — это разные штуки.

    вот вы повесили два Слушателя на одно и то же Имя (или Тип) события на одном и том же Элементе. Это всё равно, что в один массив засунуть две функции. При наступлении События данного Типа, последовательно выполнятся все функции из «массива».

    Юзер кликнул мышкой — браузер создал Событие с Типом "click". Клик отправляется в путешествие: начинает с document и ныряет глубже до того элемента на котором была мышка. Затем это же событие всплывает наверх, обратно, до document.

    Где-то по пути Событие могут Слушать и Поймать (и не отпустить дальше). В вашем примере его поймают на document в конце обратного пути. И прогонят через строй Слушателей )
    Ответ написан
    Комментировать
  • Зачем нужен восклицательный знак при объявлении переменной TS?

    Lynn
    @Lynn
    nginx, js, css
    Он говорит компилятору TS, что не нужно ругаться на неинициализированную переменную. Что на самом деле она будет инициализирована каким-то способом который TS не может отследить. Например, в данном случае она инициализируются внутри static блока, а TS видимо этого пока не понимает.
    Ответ написан
    Комментировать