• Как создать объект из массивов разной длинны. keys = [key1, key2, key3] values = [value1, value2, value3, value4, valu5, value6]. На выходе: {}?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const keys = ['key1', 'key2', 'key3'];
    const values = ['value1', 'value2', 'value3', 'value4', 'valu5', 'value6'];
    
    const makeGen = function*(arr) {
      let index = 0;
      const { length } = arr;
      
      while (true) {
        yield arr[index++ % length];
      }
    }
    
    const keyGen = makeGen(keys);
    const valGen = makeGen(values);
    const length = Math.max(keys.length, values.length);
    
    const result = Array.from({ length }, () => [keyGen.next().value, valGen.next().value]);
    
    console.log(JSON.stringify(result, null, 2));
    
    /*
    [
      [
        "key1",
        "value1"
      ],
      [
        "key2",
        "value2"
      ],
      [
        "key3",
        "value3"
      ],
      [
        "key1",
        "value4"
      ],
      [
        "key2",
        "valu5"
      ],
      [
        "key3",
        "value6"
      ]
    ]
    */
    Ответ написан
    Комментировать
  • Как сделать подобную анимацию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Анимацию линий от положения курсора можно сделать гораздо «легче» без библиотек.

    Поверх картинки абсолютно позиционируется SVG с этими всеми линиями. Координаты линий динамически меняются.

    Сделал примитивный пример, линия летает поверх фотки:

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

    Pro tip: сделайте минимальную инерционность: чтобы к курсору постоянно стремилась невидимая точка с небольшой задержкой, как на резинке, а уже от координат этой невидимой точки анимируйте линии — так будет плавнее и загадочнее. Координаты невидимой точки в любой момент приближаются к текущему положению курсора на 80%, скажем.
    X_точки = предыдущий_X_точки + (X_мышки - предыдущий_X_точки) * 0.8
    В этом ответе подробнее раскрыл тему.
    Ответ написан
    1 комментарий
  • Как создать подобную функцию в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Упомянутый метод fadeOut() вероятно, из jQuery?

    Там эти новые методы добавляются самим jQuery и установленными плагинами не к элементам, а к элементам-обёрнутым-в-jQuery всё-таки:
    - elem.fadeOut();
    + $('selector').fadeOut();

    Поэтому посмотрите, может, как писать плагины к jQuery. Именно своим плагином можно добавить новые «методы через точку».
    Ответ написан
    Комментировать
  • Я тут таймер сделал, но почему то когда я переключаю окно на что-то другое, таймер останавливается. В чем проблема?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Неактивные вкладки экономят ресурсы и таймеры в них срабатывают раз в 10 реже.

    Поэтому для таймера, который пытается показывать реальное время, исходить из того, что срабатывания будут нерегулярными и редкими. Сработал очередной «тик» ? — хорошо, повезло.

    Часы лучше делать вычисляемыми. Запустили — запомнили время (до которого отсчёт).
    Сработал очередной «тик» — посчитали, где мы сейчас: Date.now() и сколько сейчас времени до времени-Ч. И это отрисовали.
    Ответ написан
    Комментировать
  • В чём деловая польза нейросетей?

    Есть. Дикпики автомагически банить в юзер-контенте крупных соц. проектов.
    Без нейросетей пришлось бы кому-то вручную..
    Ответ написан
    Комментировать
  • Как удалить блок при клике на кнопку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вот пример с создавать-удалять:
    Ответ написан
    Комментировать
  • Как с помощью input открыть нужный элемент массива?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Кнопка не нужна
    Ответ написан
    Комментировать
  • Как дождаться ответа функции?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Судя по исходникам (если я нашёл достаточно старую версию, как у вас), метод get() вызывает переданную в него функцию, и первым параметром в неё – уже готовый хэш (строку). И только вторым параметром массив компонентов. Так что зря вы затеяли бездумно копировать чужой код со всяких форумов самостоятельно собирать строку.

    Попробуйте как-то так:
    Fingerprint2.get(hash => {
      $.ajax({
        type: 'post',
        url: 'https://api.example.com/log',
        dataType: 'json',
        data: { hash },
        success: res => console.log('OK!', res),
        error: console.error,
      });
    });
    Но вообще, переходите на поддерживаемую и обновляемую версию пакета @fingerprintjs/fingerprintjs
    Ответ написан
    Комментировать
  • Как отсортировать массив массивов по вложенным элементам?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    взять из массива предпоследний элемент: arr[arr.length - 2]
    сранить две строки, содержащие числа, как числа: Number(a) - Number(b)
    Ответ написан
    Комментировать
  • Как привести элементы коллекции Map к нижнему регистру?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. Собрать в массив имена ключей, которые будем «переименовывать».
    2. Пройти по этому массиву:
      • брать значение из Map
      • создавать новый toLowerCase() ключ с этим значением
      • удалять исходный ключ
    решение
    const MyMap = new Map([['aAa', 'A'], ['bbb', 'B'], ['CcC', 'C']]);
    const toRename = [...MyMap.keys()].filter(key => key.toLowerCase() !== key);
    // [ "aAa", "CcC" ]
    
    toRename.forEach(key => {
      MyMap.set(key.toLowerCase(), MyMap.get(key));
      MyMap.delete(key);
    });
    // MyMap: { bbb → "B", aaa → "A", ccc → "C" }
    По-хорошему, надо проверять ещё, что ключ именно строка. А то Map дело такое, там и объект ключом может.
    Ответ написан
  • Как можно задать разные группы атрибутов для сериализации дочерних объектов?

    sergiks
    @sergiks Автор вопроса
    ♬♬
    В общем, разобрался: очень похожий пример нашёлся в документации: Overriding Groups of Deeper Branches of the Graph

    Вкратце, нужно передать в контекст сериализатора массив с именами групп. Массив с вложенными под-массивами, описывающими, соотв. очередные уровни под-объектов. Для примера:
    $groups = [
        'detailed',
        'parent' => [
            'short',
            'parent' => [
                'short',
                'parent' => [
                    'short',
                ],
            ],
        ],
    ];
    Ответ написан
    Комментировать
  • Как подключить node js библиотеку?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    План:
    1. создать пустой проект npm init Для этого понадобится сначала установить на комп node и npm
    2. установить в него этот шахматный модуль npm install ...
    3. создать файл main.js, где объединить ваш код и этот модуль
      import { Game } from 'js-chess-engine'; // 1-я строчка в файле main.js
      const game = new Game();
      // ... ваш код, взаимодействующий с game

    4. добавить в проект какой-нибудь сборщик, например, WebPack или RollupJS
    5. «собрать» этим сборщиком проект в один файл – который уже можно подключить в браузере
    Ответ написан
    Комментировать
  • Как выводить новые данные на страницу в зависимости от ответа пользователя?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    По данным из JSON ездит «курсор», указывающий на какой-то один вопрос.
    Переменная, в которой лежит ключ текущего вопроса. Сначала "1". Потом, в зависимости от ответа.
    Установили новое значение – показали новый вопрос.

    Можно заполнять массив «историей», чтобы добавить функционал шагать «назад» и потом вернуться «вперёд», или начать отвечать иначе.

    Ответ написан
    Комментировать
  • Как объединить два gif скриншота в один, по вертикали?

    ffmpeg и фильтр vstack — подходит, когда у входных источников одинаковая ширина и одинаковый пиксельный формат.

    Простой рабочий вариант:
    ffmpeg \
      -i 1.gif \
      -i 2.gif \
      -filter_complex vstack \
      result.gif

    Далее можно попытаться уменьшить размер результирующего gif'а, генерить оптимальную палитру — всё описано сто раз, гуглится и выходит за рамки вопроса.
    Ответ написан
    Комментировать
  • Как правильно устанавливать что-либо в Docker контейнеры?

    1. Если это на 1 раз, то №1.
    2. Если понадобится более 1 раза, то №2. Там несложно: всего 2 инструкции: FROM (имя исходного образа), и RUN и там как в bash файле команды apt-get update && apt-get install XXX && ...
    Ответ написан
    Комментировать
  • Написать функцию, принимающую массив сотрудников из объектов, и возвращающую массив строк. Какие ещё есть способы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Adamos верно заметил, что в задании просили функцию, а вы разово получаете результат. Согласен, что это вероятная причина отказа.

    Ещё вариант в копилку, принципиально не меняющий сути мэппинга:
    Array.from(employees, ({name, age}) => `Имя: ${name}, возраст: ${age}`)
    Ответ написан
    Комментировать
  • Как работает замыкание в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Каждый вызов createCounter() создаёт и возвращает новую функцию. С которой в комплекте идёт свой новый «чемодан» замыкания, в котором лежит своя переменная counter.
    Каждый раз отдельная-новая.

    откуда берется counter при втором вызове console.log(z())

    Из того же «чемодана» от первого вызова createCounter()
    Ответ написан
    2 комментария
  • Как найти в одну переменную 2 класса?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    какой логической операцией хотите два класса сочетать?
    класс1 И класс2 — чтобы непременно оба были в наличии у элемента, и тогда только его брать;
    класс1 ИЛИ класс2 — достаточно любого одного из двух, ну или оба, вообще супер.

    Чтобы непременно оба класса одновременно присутствовали:
    document.querySelector('.popup__close.popup__area'); // без пробела


    Чтобы хотя бы один был:
    document.querySelector('.popup__close, .popup__area'); // через запятую


    Ну и помните, разумеется, что querySelector() выбирает первый подходящий найденный элемент. Один.
    А querySelectorAll() выберет все подходящие.
    Ответ написан
    Комментировать
  • Какой 3d редактор на маке самый удобный и есть учебники?

    Maxon Cinema 4D
    Уроков на русском языке полно.
    Но как проще моделировать такую далеко не «простую» красоту я что-то не представляю.
    Может, это на основе реального объекта из фотографий сделано? Там вон нижний виток, скажем, неидеально округлый.
    Ответ написан
  • Как вот это сделать на стандарте ES6?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Как-то так, наверное:
    import { initializeApp, credential } from 'firebase-admin';
    import serviceAccount from './my.json';
    
    initializeApp({
      credential: credential.cert(serviceAccount),
    });
    Ответ написан
    2 комментария