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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Отсортировать массивы по id и за один параллельный проход найти сразу добавленные, удалённые и изменённые.
    oldArray.sort((a, b) => a.id - b.id);
    newArray.sort((a, b) => a.id - b.id);
    oldIdx = 0;
    newIdx = 0;
    while (oldIdx < oldArray.length || newIdx < newArray.length) {
      if (oldIdx >= oldArray.length || oldArray[oldIdx].id > newArray[newIdx].id) {
        console.log(`Added id newArray[newIdx].id`);
        newIdx += 1;
        continue;
      }
      if (newIdx >= newArray.length || oldArray[oldIdx].id < newArray[newIdx].id) {
        console.log(`Deleted id oldArray[oldIdx].id`);
        oldIdx += 1;
        continue;
      }
      if (oldArray[oldIdx].x !== newArray[newIdx].x) {
        console.log(`Changed id newArray[newIdx].id`);
        oldIdx += 1;
        newIdx += 1;
      }
    }
    Ответ написан
    5 комментариев
  • Есть ли приложение или программа, которая воспроизводит звук у других пользователей при нажатии кнопки?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Отправлять сообщение в общий чат любого мессенджера, а коллеги пусть будут онлайн и не мьютят сообщения ))
    Ответ написан
    Комментировать
  • Как из массива строк получить те, у которых длина равна 5?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Дурацкому вопросу - дурацкий ответ:

    `${arr}`.match(/\b\w{5}\b/g) || []
    
    // или
    
    arr.reduce((acc, n) => (n.length ^ '0b101' || acc.push(n), acc), [])
    
    // или
    
    arr.filter(n => n[4] && !n[-~4])
    
    // или
    
    arr.filter(RegExp.prototype.test.bind(/^.....$/))
    
    // или
    
    arr.reduce((acc, n) => ((acc[n.search('$')] ??= []).push(n), acc), {})[5] ?? []
    
    // или
    
    (function xxx(arr, i = 0) {
      return arr.hasOwnProperty(i)
        ? [].concat(5 - [].push(...arr[i]) ? [] : arr[i], xxx(arr, i + 1))
        : [];
    })(arr)
    Ответ написан
    Комментировать
  • Как оптимизировать нерекурсивный обход дерева?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Что значит оптимизировать? Не хардкодить ключи? Уменьшить количество проверок? Всё просто: вложенные данные, а значит и необходимость что-то закинуть в стек, может случиться только при обработке объектов, так что вот это и надо проверять - что текущее значение, оно instanceof Object.

    Какие значения должны попадать в массив с результатами - этот вопрос тоже можно решить в более общем виде. Пусть это будет параметр - функция, принимающая значение и возвращающая true или false.

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

    Короче вот, "оптимизировано":

    function getNestedData(data, test) {
      const result = [];
    
      for (const stack = [ data ]; stack.length;) {
        const n = stack.pop();
    
        if (n instanceof Object) {
          stack.push(...Object.values(n).reverse());
        }
    
        if (test(n)) {
          result.push(n);
        }
      }
    
      return result;
    }
    
    
    console.log(getNestedData(tree, Number.isFinite));
    Ответ написан
    Комментировать
  • Как отправлять запрос каждые N секунд, пока в ответ не получу нужный статус?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Асинхронная функция, внутри бесконечный цикл, в цикле запрос. Если результат запроса нас устраивает - выходим из цикла. Задержка между итерациями цикла реализуется с помощью промиса, который резолвится по таймауту.

    async function() {
      let result = null;
    
      while (1) {
        result = await fetch(...);
    
        if (result тот, который нужен) {
          break;
        }
    
        await new Promise(r => setTimeout(r, 5000));
      }
    
      return result;
    }
    Ответ написан
    6 комментариев
  • Как получить числа из нескольких div?

    XanXanXan
    @XanXanXan
    Array.from(document.querySelectorAll('.watch__price'), item => parseInt(item.textContent.match(/\d+/)));
    Ответ написан
    Комментировать
  • Как просуммировать интервал чисел?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это называется арифметическая прогрессия. Ее сумма считается очень просто. Там и циклы не надо.
    Ответ написан
    2 комментария
  • Как через цикл вложить элементы DOM один в другой?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Перебираем массив от конца к началу:

    main.innerHTML = arr.reduceRight((content, tag) => `<${tag}>${content}</${tag}>`, '');
    
    // или
    
    main.append(arr.reduceRight((content, tag) => {
      const el = document.createElement(tag);
      el.append(content);
      return el;
    }, ''));

    И наоборот:

    main.insertAdjacentHTML('beforeend', (function next(i) {
      return arr[i] ? `<${arr[i]}>${next(-~i)}</${arr[i]}>` : '';
    })(0));
    
    // или
    
    arr.forEach(function(tag) {
      this[0].appendChild(document.createElement(tag));
      this[0] = this[0].lastChild;
    }, [ main ]);
    Ответ написан
    Комментировать
  • Как через цикл вложить элементы DOM один в другой?

    RAX7
    @RAX7
    var arr = ['div', 'p', 'span'];
    var main = document.querySelector('.main');
    
    for (let i = 0, container = main; i < arr.length; i++) {
      let el = document.createElement(arr[i]);
      container.append(el);
      container = el;
    }
    Ответ написан
    Комментировать
  • Какое оборудование нужно для соединения коммутаторов в разных зданиях на расстоянии 200 м?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Вариант 1 (самый простой/дешманский): Делим участок на сегменты менее 100м, желательно чтобы стыки были в районе розеток. Покупаем самый дешевый обычный свитч DES/DGS-1005, подключаем и работаем
    Вариант 2 (по дороже): Вариант 1, только вместо свитчей POE-коммутаторы(инжекторы)/удлинители. Если к местам стыков нет возможности подвести 220В
    Вариант 3 (надежный/геморойный): Оптоволокно, если позволяют условия - можно купить готовый оконеченный патчкорд и протянуть, если нет - тянуть кабель и оконечивать. Любой провайдер подрядиться такое спроектировать/сделать.
    Вариант 4. (в прямой видимости): WI-FI радиомост на направленных точках доступа/антенах. Ну не забиваем, что от каждой точки доступа до ближайшего свитча также может быть до 100м
    Вариант 5. (когда проложить нет возможности): Использование технологий PLC (powerline) - подключение по существующей электропроводке, через спец адаптеры. VDSL - подключение по существующей прямой телефонной линии (1 паре)
    Вариант 6. (арендный) При наличии на обоих концах точек присутствия провайдера. Заказать услугу темного волокна или mpls, объединение сетей
    Вариант 7. (интернетный): При наличии на обоих концах точек присутствия провайдера. Объединение сетей через классический VPN.
    Ответ написан
    2 комментария
  • Как сделать сортировку HTML объектов в зависимости от чисел внутри элемента?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Как получить массивоподобные или итерируемые данные в отсортированном виде - функция сортировки получает данные и функцию, принимающую элемент данных и возвращающую его вес (может быть числом или строкой); собирается массив пар, состоящих из элементов данных и их весов; полученный массив сортируется, функция сравнения проверяет, как веса элементов соотносятся между собой; из отсортированного массива извлекаются элементы исходных данных:

    const sorted = (data, key) => Array
      .from(data, n => [ key(n), n ])
      .sort(([a], [b]) => a < b ? -1 : +(a > b))
      .map(n => n[1]);

    Как отсортировать содержимое DOM-элемента - да просто добавить ему это содержимое в отсортированном виде:

    const sortChildren = (el, key) =>
      el.append(...sorted(el.children, key));

    Направление сортировки будем указывать с помощью data-атрибута:

    <button data-order="-1">От большего к меньшему</button>
    <button data-order="+1">От меньшего к большему</button>

    Кнопкам назначаем общий обработчик клика, где сортируем содержимое .catalog-items (вес элемента - число внутри, умноженное на направление сортировки), кликнутой кнопке класс добавляем, у остальных убираем:

    const wrapper = document.querySelector('.catalog-items');
    const buttons = document.querySelectorAll('[data-order]');
    
    buttons.forEach(n => n.addEventListener('click', onClick));
    
    function onClick({ target: t }) {
      const order = +t.dataset.order;
      sortChildren(wrapper, el => parseInt(el.innerText) * order);
      buttons.forEach(n => n.classList.toggle('active', n === t));
    }
    Ответ написан
    3 комментария
  • Сайты для поиска единомышленников?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нигде. Незачем middle+ разрабу работать над чужими идеями, он скорее всего завален высокооплачиваемой работой, очень ценит личное время и полон собственных идей.
    Ответ написан
    24 комментария
  • Как реализовать честную игру в Угадай число?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Где-то сто лет назад я такое видел. Без всяких заморочек с хешем, что для пользователя проблемно. Там был просто запороленный архив с результатом. Это намного проще.
    Ответ написан
    2 комментария
  • Как запретить вводить буквы в поле?

    @historydev Куратор тега JavaScript
    <input class="input-number" type="number">
    Ответ написан
    4 комментария
  • Как удалить все классы, начинающиеся с определённой подстроки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Кого надо удалить: const classPrefix = 'modal--';

    Удаляем:

    Array.from(el.classList).forEach(n => el.classList.toggle(n, !!n.indexOf(classPrefix)));

    или

    el.classList.remove(...[...el.classList].filter(n => n.startsWith(classPrefix)));

    или

    for (let i = el.classList.length; i--;) {
      if (el.classList[i].search(classPrefix) === 0) {
        el.classList.remove(el.classList[i]);
      }
    }

    или

    el.classList.value = el.classList.value
      .split(' ')
      .filter(RegExp.prototype.test.bind(RegExp(`^(?!${classPrefix})`)))
      .join(' ');

    или

    el.className = el.className.replace(RegExp(`(^| )${classPrefix}\\S*`, 'g'), '').trim();
    Ответ написан
    9 комментариев
  • Как получить доступ к [[Scope]]?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Никак. Нельзя просто так взять и вытащить данные из замыкания
    Ответ написан
    Комментировать
  • Как повторить каждый символ, чтобы количество повторений было равно его позиции в строке?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const xxx = str => Array
      .from(str, (n, i) => n.toUpperCase() + n.toLowerCase().repeat(i))
      .join('-');

    или

    const xxx = str => str
      .toUpperCase()
      .split('')
      .reduce((acc, n, i) => `${acc}${i ? '-' : ''}${n}${Array(-~i).join(n.toLowerCase())}`, '');

    или

    const xxx = str => str
      .toUpperCase()
      .replace(/(?<=.)./g, (m, i) => '-'.concat(m, ...Array(i).fill(m.toLowerCase())));
    Ответ написан
    Комментировать
  • Почему синхронный код в JS потребляет больше памяти?

    Fragster
    @Fragster
    помогло? отметь решением!
    await - это не "синхронно". Это синтаксический сахар. Соответственно, "внутри" всё то же самое, те же промисы и коллбэки. Скорее всего кушать память стало из-за кривого переписывания.
    Ответ написан
    Комментировать
  • Как понять что делает данный код php?

    v3shin
    @v3shin
    Веб-шаман
    Навскидку код развернулся в
    <?php
    $OO000O0000 = file(preg_replace("@\(.*\(.*$@", "", __FILE__));
    if (preg_replace("@\(.*\(.*$@", "", __FILE__) == __FILE__ or preg_replace("@\(.*\(.*$@", "", __LINE__) != 3)
        die("<tt>ERROR");
    function OOOO0000O0($a, $b)
    {
        if ($b == 162) {
            $d = substr($a, 1303, 8);
        } elseif ($b == 13) {
            $d = substr($a, 973, 330);
        } elseif ($b == 40) {
            $d = trim(substr($a, 1311));
        }
        return $d;
    }
    eval(base64_decode(OOOO0000O0($OO000O0000[0],13)));
    eval(OOOO0OOO0O(OOOO0000O0($OO000O0000[0],40),OOOO0000O0($OO000O0000[0],162),$OO000O0000));
    __halt_compiler();
    [binary]

    Дальше, как я понял, скрипт вырезает, декодирует и выполняет куски из [binary], туда я не лез. В общем, можете покопаться, но ЗАПУСКАТЬ НЕ СОВЕТУЮ.
    Ответ написан
    Комментировать