Задать вопрос
  • Kак из массива вставлять все его элементы в теги?

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Примерно правильно понимаете.

    Сначала создаётся объект-оглавление indexPatients.
    Ключи id – значения объекты:
    {
      "1": { id: 1, name: "Максим" },
      "2": { id: 2, name: "Николай" },
      // и так далее
    }

    Из такого объекта-индекса удобно по id вытащить соотв. объект.

    Вторым шагом берём массив, где перечислены id в нужном порядке.
    И заменяем методом map() каждый id на соотв. ему полный объект.

    В итоге получаем массив с объектами в нужном порядке.
    Ответ написан
    5 комментариев
  • Как объединить несколько массивов?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $keys = ['sku', 'brand', 'City1', 'City2'];
    $setKeys = function ($values) use ($keys) {
    	return array_combine($keys, $values);
    };
    
    $data = [ [1,2,3,4], [11,22,33,44], ];
    
    $result = array_map($setKeys, $data);

    $result
    Array
    (
        [0] => Array
            (
                [sku] => 1
                [brand] => 2
                [City1] => 3
                [City2] => 4
            )
    
        [1] => Array
            (
                [sku] => 11
                [brand] => 22
                [City1] => 33
                [City2] => 44
            )
    
    )
    Ответ написан
    Комментировать
  • Смена названия месяца?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Задача не вполне ясна. Но вот пара подсказок:

    1. делать из строки "31 января" полноценный объект даты, дописав текущий год
    2. из объекта Date легко узнать, последний ли это день месяца: прибавить 1 день и сравнить, изменился ли месяц
    Ответ написан
    Комментировать
  • Как проверить, что в массиве есть одинаковые объекты?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Пара способов:
    1. по-правильному можно сравнивать каждый-с-каждым правее, пока не найдётся первое равенство.
    2. в одну строку можно очистить от повторов, конвертировав массив в Set (и снова в массив), и сравнить длины

    спойлер №1
    const hasDuplicates = arr => {
      for (let L = 0; L < arr.length - 1; L++) {
        for (let R = L + 1; R < arr.length; R++) {
          if (arr[L] === arr[R]) return true;
        }
      }
    
      return false;
    };

    спойлер №2
    const hasDuplicates = arr => arr.length !== (new Set(arr)).size;


    P.S. за один-единственный вызов document.querySelectorAll() дубликатов точно не нахватает. Вся затея с дублями имеет смысл, только когда вызывают это дело несколько раз.
    Ответ написан
    Комментировать
  • Как правильно сортировать массив с датами и разным часовым сдвигом??

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сортирует правильно, с учётом временных зон. Именно в таком порядке произойдут эти события.

    Если хочется проигнорировать часовые пояса и представить (зачем-то), что время у всех событий указано в одной общей временной зоне, то можно отрезать лишнее — брать часть строки до "GMT":
    test.forEach(item => item.tsNoTZ = new Date(item.dateAndTime.substring(0, 24)));
    test.sort((a, b) => b.tsNoTZ - a.tsNoTZ);
    И лучше только однажды пройти по массиву и добавить каждому объекту новое поле, по которому потом сортировать.
    Ответ написан
    Комментировать
  • Как обновлять счётчик кликов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. массив не «реактивный», как в каком-нибудь React или Vue. Простой обычный массив. Поэтому чтобы отобразить изменения его длины, надо каждый раз, при изменении, вручную вызывать disp.innerHTML = arr.length;
    Поместить это и внутрь функции, и оставить на первый раз снаружи, чтобы показать исходное состояние.

    2. «источник правды» – на сервере. Например, в БД хранить значение счётчика. При запросе страницы отдавать сразу же и текущее значение счетчика. При нажатии на кнопку, тут же сообщать серверу, что, мол, «увеличили на 1». Именно так, а не «значение стало 100500» – т.к. в это время кто-то друго тоже мог кликнуть. В ответ сервер возвращает очередное актуальное значение с учётом и других кликнувших.
    Чтобы это всё работало вообще в реальном времени, можно использовать соединение WebSocket, по которому в обе стороны пересылать сообщения. От бразуера в бэк типа: "тут кликнули!". От бэка в бразуре "а вот новое значение суммы всех кликов: XXX"
    Ответ написан
    Комментировать
  • Как вывести Сумму нечетных чисел в определенном диапазоне?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно и сразу по формуле посчитать. Сумма нечетных от 1 до X равна квадрату числа нечетных:
    const getSumOfNumbers = maxNumber => Math.ceil(maxNumber / 2) ** 2;

    Проверки:
    getSumOfNumbers(4) // 4
    getSumOfNumbers(5) // 9
    getSumOfNumbers(6) // 9
    getSumOfNumbers(100) // 2500
    Ответ написан
    Комментировать
  • Как заполнить таблицу рандомными числами?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    CodePen
    Ответ написан
    Комментировать
  • Как вывести номер элемента в пагинации?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Клик может принять и ссылка и элемент списка.МОжно ловить оба варианта:

    Ссылку сбираю примитивно, как строку текста. Правильнее как предложил felony13twelve через URL.
    Ответ написан
    Комментировать
  • Как подсчитать сколько раз использовался символ?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Строку по буквам можно перебрать циклом for .. of:
    let n = 0;
    for (const c of 'Moloko') {
      if (c === 'o') n++;
    }
    n // 3


    <Offtopic> не первый раз замечаю, что русскоязычная версия документации на MDN чуть хуже англоязычной. Например, явно String упоминается в английской, но не в русской версии описания for .. of
    Теории заговора welcome в комменты : )
    Ответ написан
    1 комментарий
  • Как отписаться от события, если оно обрабатывается замыканием?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Положить итоговый обработчик в переменную, и её использовать для removeEventListener()
    Примерно так:
    document.body.addEventListener("click", clickHand("WOW!"));
    
    function clickHand(str) {
      const handler = ({ target }) => {
        console.log(target);
        console.log(str);
        document.body.removeEventListener("click", handler);
      };
    
      return handler;
    }
    Ответ написан
    Комментировать
  • Не работает remove. Как починить?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Точки уберите. Вот так работает:
    animation.classList.remove("circle");
    animation.classList.add("circle-active");
    тут уже идёт работа с именами классов.
    Ответ написан
    Комментировать
  • Нужно рандомный индекс чисел массива?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    нужно «перемешать» массив ("shuffle").

    Например:
    Взять упорядоченный [1, 2, 3, .. 10]
    и попереставлять местами пары элементов.

    1-й с каким-то от 1 до 10 поменять местами.
    2-й с каким-то от 2 до 10
    и т.д. очередной с кем-то случайным правее, начиная с себя.

    Алгоритм Фишера-Йейтса
    Ответ написан
    6 комментариев
  • Как отследить изменения полей?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    на обоих полях слушать событие "input" — когда что-то меняется.

    Обработчик этих событий один, общий.
    Он проверяет, заполнены ли оба поля,
    и добавляет/убирает атрибут disabled на кнопке
    или меняет класс цвета кнопки.
    Ответ написан
  • Как найти минимальное значение в строках матрицы?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Почти правильно решили.
    В коде надо четко понимать, что есть что.

    Math.min() возвращает минимальное значение среди переданных ему.
    Т.е. надо в скобки Math.min() положить несколько значений, из которых он выберет одно, минимальное.

    В задании просят найти минимальное в каждой строке. Значит, в Math.min() надо передать все значения из очередной строки.

    Обычно Math.min() принимает варианты через запятую: Math.min(1, 3, 5), но у нас каждая строка это массив вроде [1, 3, 5] Массив удобно «распаковать» с помощью трёх точек ... (так называемый оператор расширения). Есть очередная строка в массиве arr – передать её в Math.min(...arr) – вернёт минимальное значение.

    Сейчас внешний цикл for() перебирает у вас как раз строки двумерного массива. То, что надо.
    Вложенный цикл уже и не нужен.

    P. S. минимальное значение можно искать и перебором, со вторым, вложенным циклом for() как у вас. Это длиннее, но тоже работает, особенно на больших объёмах данных. В таком варианте надо бы убрать Math.min() в конце.

    В каждой итерации инициализировать s не в 0, а в константу Number.POSITIVE_INFINITY – больше её точно ничего не будет, все значения окажутся меньше. А дальше сравнивать текущее значение s с очередным числом из строки. И если очередное оказалось меньше — переназначать s это значение, очередной найденный минимум.

    spoiler
    document.write(
      mass.map(row => Math.min(...row)).join(', ')
    ); // 2, 4, 7
    Ответ написан
    Комментировать
  • Почему выводит пустой цвет фона у элемента?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    red.style.backgroundColor – берётся элемент red,
    его свойство style содержит инлайновые стили, назначенные именно этому элементу. Напрямую.

    Не унаследованные через листы стилей, предопределённые браузером, назначенные браузерным расширением.

    Напрямую свойство в style:
    const el = document.createElement('div');
    div.style.backgroundColor = "red";
    
    div.style.backgroundColor // "red"


    Добавленный класс:
    div.classList.add("green-text"); // CSS .green-text { color: green; }
    
    div.style.color // ""

    Прямо в разметке
    <p style="font-weight: bold">Bold</p>
    document.querySelector('p').style.fontWeight // "bold"

    Унаследованный от родителя
    <p style="font-weight: bold">
      <span>Bold</span>
    </p>

    document.querySelector('span').style.fontWeight // ""
    Ответ написан
    Комментировать
  • Как выполнить код?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Обернуть в функцию:
    let retryCount = 0;
    const retryMax = 3;
    const url = 'https://example.com/api/method';
    
    const getData = () => {
      $.get(url, data => {
        // ...
      }).fail(() => {
        if (++retryCount <= retryMax) {
          setTimeout(getData, 1000); // через секунду
        } else {
          console.error('Так и не получилось');
        }
      });
    };
    
    getData();
    Ответ написан
    Комментировать
  • Как задать :hover для самого элемента?

    Никак.

    Только через таблицу стилей.
    Или имитировать, обрабатывая события JavaScript'ом.

    Отчего бы не назначать один из трёх классов налету:
    switch (Model[i].Type) {
      case EventType.Call:
        className = 'my-class-call';
        break;
      case EventType.Meeting:
        className = 'my-class-meeting';
        break;
      // ...
    }
    
    <a class="@className" id="user-event-@i" href="@Url.Action("Details", "Event", new { @id = @Model[i].Id })">
      <div style="width: 100%; min-height: 110px; border-top: 2px solid #CFCED1; border-left: 1px solid #CFCED1; border-right: 1px solid #CFCED1; background-color: @backgroundColor; cursor: pointer;">
      </div>
    </a>


    И определить однажды в начале стили
    .my-class-call { ... }
    .my-class-call:hover { ... }
    
    .my-class-meeting { ... }
    .my-class-meeting:hover { ... }
    Ответ написан
    4 комментария