Ответы пользователя по тегу JavaScript
  • Как посчитать количество пересечений с помощью метода filter?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Считаем множественное вхождение букв:
    const newWord = 'JavaScript';
    
    let glas = ['a','e','i','o','u'];
    
    const lettersCount = (word, letters) =>
      word.toLowerCase().split('').reduce((a, l) => (letters.includes(l) && (a[l] = (a[l] ?? 0) + 1), a), {});
    
    console.log(lettersCount(newWord, glas));


    P.S: Если нужно считать буквы в разном регистре отдельно, требуются изменения.
    Ответ написан
    Комментировать
  • Обьясните про функцию массив?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Твоя функция содержит ошибку. Нужно сравнивать не с a[0], а с result.

    const getMin = arr => {
      let result = arr[0];
      for(i = 0; i < arr.length; i++){
        if(arr[i] < result){
          result = arr[i];
        }
      }
      return result;
    }
    
    const getMinOld = a => {
      let result = a[0];
      for(i=0;i < a.length;i++){
        if(a[i]< a[0]){
          result = a[i];
        }
      }
      return result;
    }
    
    let mas = [22,5,8,3,44,16];
    
    console.log(getMin(mas)); // 3
    console.log(getMinOld(mas)); // 16
    Ответ написан
  • Как избежать зависание textarea при обработке большого массива?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    <input type="text" id="textarea">

    // Код воркера в виде строки
    const workerCode = `
      self.onmessage = (event) => {
        const largeArray = event.data;
        
        // Выполнение тяжелой обработки массива
        for (let i = 0; i < largeArray.length; i++) {
          // Например: largeArray[i] = someProcessing(largeArray[i]);
          largeArray[i] *= 2; // Пример обработки: удваиваем каждый элемент
        }
    
        // Отправка обработанных данных обратно в главный поток
        self.postMessage(largeArray);
      };
    `;
    
    // Создание Blob из строки с кодом воркера
    const blob = new Blob([workerCode], { type: 'application/javascript' });
    // Создание объекта Worker из URL на Blob
    const worker = new Worker(URL.createObjectURL(blob));
    
    // Обработка сообщений от воркера
    worker.onmessage = (event) => {
      const processedArray = event.data;
      console.log('Обработанный массив:', processedArray);
      // Можно обновить интерфейс или использовать данные
    };
    
    // Пример массива для обработки
    const largeArray = new Array(1e6).fill(15);
    
    function debounce(func, delay) {
      let timeout;
      return function(...args) {
          clearTimeout(timeout);
          timeout = setTimeout(() => func.apply(this, args), delay);
      };
    }
    
    const handleInput = debounce(() => {
      worker.postMessage(largeArray);
    }, 300); // Вызываем через 300 мс после окончания ввода
    
    // Пример добавления обработчика для textarea
    textarea.addEventListener('input', (event) => {
      console.log(event.target.value);
      handleInput();
    });
    Ответ написан
    1 комментарий
  • Как применить js код к своему блоку?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Рефакторинг на тебе.
    Ответ написан
    Комментировать
  • Как изменить набор ключей в массиве?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Да тут решать нечего, но раз уш пентиум напрячь хочется, вот тебе ребус:

    map
    forEach
    Object
    Object.keys
    delete

    решение

    const data3 = [
      { x: 1, y: 2, z: 3 },
      { x: 4, y: 5, z: 6 },
      { x: 7, y: 8, z: 9 },
    ];
    
    const changeKeyses = (arr, new_keyses) => arr.map(obj => {
    	Object.keys(obj).forEach((key, i) => {
                let new_key = new_keyses[i];
      	    if (new_key !== undefined) {
        	        let val = obj[key];
                    delete obj[key];
                    obj[new_key] = val;
                }
            });
      
           return obj;
    });
    
    console.log(changeKeyses(data3, ["a", "b", "c"]));
    console.log(changeKeyses(data3, ["a", "b"]));
    console.log(changeKeyses(data3, ["a"]));

    Ответ написан
    Комментировать
  • Почему метод pop удаляет не все елементы массива?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    const ar = [3,8,4,6,7,9,5]
    while(ar.length > 0) {
      console.log(ar.pop())
    }
    Ответ написан
    Комментировать
  • Как запустить цикл for of для длинны массива?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    const something = async _ => new Promise(resolve => setTimeout(resolve, 100));
    
    const asyncRecursive = async (limit, count = 0) => {
      await something();
      console.log(count);
      count+=1;
      if (count < limit) {
        await asyncRecursive(limit, count);
      }
    }
    
    let limit = 10;
    
    (async function() {
      for(let n of Array.from(Array(limit).keys())) {
        await something();
        console.log(n);
      }
      
      await asyncRecursive(limit);
    })();
    Ответ написан
    Комментировать
  • Почему выбрасывает ошибку о наличии какого-либо типа или о деструктуризации?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    const fn = v => v;
    const test = {[fn("test")]: undefined};
    Ответ написан
    Комментировать
  • Как добиться выбора элемента списка SELECT правой клавишей мыши?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Ответ написан
    4 комментария
  • Как достать текущий час по московскому времени?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Мск это UTC + 3, можно так:

    (new Date().getUTCHours() + 3) % 24

    Если нужен только час.
    Ответ написан
    2 комментария
  • Как лучше учить node.js?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Прочитал о методе или функции => изучил как работает => изучил как устроены метод или функция => почитал какую проблему это решает => решил эту проблему методом или функцией = закрепил на практике.

    https://metanit.com/web/nodejs/


    Лучшая практика, это научиться читать документацию сверху вниз, вместо сайтиков, которые отрывочно куски из этой документации пересказывают.
    Ответ написан
    9 комментариев
  • Какая тут логика?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Если acc[el] существует, прибавляем 1 к его значению, иначе 0 и прибавляем 1.

    Где el это буква, которая используется как ключ к объекту.
    А значение по ключу - это кол-во букв.
    Ответ написан
  • Какая логика у этого кода?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Потому-что этот алгоритм ищет наибольшее число в массиве.
    15 > 3 - поэтому в max 15

    Если точно как он работает:
    max - 3
    max - 5
    max - 15

    Остальное отбрасывается т.к. оно меньше текущего состояния max и условие не отрабатывает.
    Ответ написан
    Комментировать
  • Как динамически увеличить родительский блок в зависимости от градуса поворота дочернего?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    const rotate = document.querySelector("#rotate");
    const container = document.querySelector(".container");
    
    container.style.transform = `rotate(${45}deg)`;
    
    rotate.addEventListener('input', (e) => {
      const degree = +e.target.value;
      const scaleStep = degree*0.001;
      const scale = degree === 0 && 1 || degree === 360 && 1 || scaleStep > 1 && 1 || scaleStep < 0.75 && 0.75 || scaleStep;
      container.style.transform = `scale(${scale}, ${scale}) rotate(${degree}deg)`;
    });
    Ответ написан
    2 комментария
  • Как работают фигурные скобки в javascript?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Блоки в чистом виде лучше не использовать т.к. они сильно затрудняют чтение кода, используй блоки с операторами управления, например функцию:
    function Block1() {
    let a, b, c
    /* another code */
    }


    или анонимную функцию:
    (function() { /* my code */ })()

    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    Вопрос: как это работает?


    Прочитай как работает область видимости: https://developer.mozilla.org/en-US/docs/Glossary/Scope
    Если нужна более конкретная информация то есть спецификация: https://tc39.es/ecma262/#sec-static-semantics-vars...
    Ответ написан
  • Как переписать код на более современный JS?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Всё с этим кодом в плане "современности" нормально.
    А вот в плане читаемости и переиспользования - нет.

    Можно например вот так переписать:

    const menu = document.querySelector('.burger-menu');
    const menuList = document.querySelector('.menu__list');
    const activateMenu = () => (menuList.classList.toggle('active-menu'), menu.classList.toggle('active'));
    
    menu.addEventListener('click', activateMenu, true);
    Ответ написан
    2 комментария
  • Как реализовать домашний ПК для веб сервера и pet проектов?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Proxmox + виртуалки/lxc контейнеры - для системы на базе гипервизора.

    Виртуалка - изолирована лучше, но медленнее.
    Lxc контейнер - изолирован хуже, но работает быстрее.

    Если тебе не нужно строить сложное взаимодействие между виртуальными средами - ставь Ubuntu + docker на хост, будет намного быстрее работать, дальше через nginx reverse proxy прокидываешь порты к нужным контейнерам.

    На компе можешь (винда) в файле hosts указать домены которые указывают на твой сервак, чтобы не париться с роутером и уже в nginx конфигах в зависимости от домена, на порт определённый направлять.

    Но должен предупредить, если ты на хосте что-то сломаешь - переустановка системы, а первое время у тебя эти переустановки будут занимать больше времени, чем работа над проектами, так что будь готов 2 недели смотреть на чёрный монитор с белым текстом и не только поверх)

    В этом плане Proxmox + виртуалки отлично подходят, настроил хост - эксперименты на виртуалках ставишь.
    Дальше если по скорости не устраивает, сносишь и заводишь на хосте всё, как сказал выше, уже с полученными знаниями.

    Обезопасить - nginx, главное порт ssh если открывать в сеть будешь, перед тем как это сделать настрой ssh ключи.
    Ответ написан
    Комментировать
  • Как убрать каждый символ 'I' из строки?

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

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    const array = [1, 255, 639, 9, 7, 8, 5, 4, 2];
    
    const randomIndex = arr => Math.round(Math.random() * (arr.length-1));
    
    const randomEl = arr => {
        let index = randomIndex(arr), prev = arr[index];
        return () => {
            do {
              index = randomIndex(arr);
            }
      	while(prev === arr[index]);
            prev = arr[index];
            return arr[index];
        }
    }
    
    const getRandomEl = randomEl(array);
    
    for(let i = 0; i < 10; i++) {
        console.log(getRandomEl());
    }
    Ответ написан
    Комментировать
  • Как разделить многолинейную строку и превратить ее в однолинейную?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    list.split('\n').join('');
    Ответ написан
    Комментировать