Ответы пользователя по тегу JavaScript
  • Как выбрать из массива элементы с минимальной ценой?

    Можно сделать красиво:

    // Здесь структура сгруппированная по названию
    const values = _.groupBy(data, 'name');
    
    // Здесь структура сгруппированная по названию, и содержащая только самый дешевый вариант
    const cheapItemsMap = _.mapValues(values, items => _.sortBy(items, 'price').reverse()[0]);
    
    // Если нужен массив
    const cheapItemsList = Object.values(cheapItemsMap );
    Ответ написан
    Комментировать
  • Как сделать такую полосу прокрутки на сайте?

    Подарите дизайнеру сервый карандаш и попросить нарисовать цветную картину :)
    Это к тому, дизайнер должен понимать принципы веб и такие вещи не придумывать, чтобы потом разработчики не страдали.

    По теме – есть инверсия цветов, если цвета действительно черный и белый, плюс возможность управления отображением скроллбара. Может быть если совместить это, получится найти решение.

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

    Вариант №3, опять же JavaScript, это реализация через canvas.

    Вариант №4, и он самый лучший, это согласовать изменения в дизайне.
    Ответ написан
    Комментировать
  • Почему используют метод find в lodash?

    Лично я вижу три плюса:
    1. Этот метод работает с коллекциями, поэтому можно использовать `find` для поиска значений в словаре, например `_.find({ a: { name: 'First' }, b: { name: 'Second' } }, (user) => user.name === 'Second')`.
    2. Так как метод работает с коллекциями, можно передавать и массив, и объект, может быть иногда это востребовано
    3. Удобно использовать в функциональном программировании для формирования цепочек вызовов
    Ответ написан
  • Помоги почему не работает мой код на js?

    У строки тоже есть slice:

    function maskify(cc) {
      return cc.slice(0, -4);
    }


    Если нужен массив на выходе:
    function maskify(cc) {
      return cc.slice(0, -4).split('');
    }
    Ответ написан
    Комментировать
  • Как при скролле вверх плавно показать меню?

    Если меню не фиксированное, можно использовать transform (CSS) – в нужных позициях положение меню изменится (визуально), но влияния на соседние элементы не будет. Плюс делаете transition (CSS) на transform, и получите плавную анимацию меню. Можно сделать на JS через CSS-классы.
    Ответ написан
    Комментировать
  • Как запретить прокрутку body до конца?

    Слушайте событие прокрутки, и если оно превышает значение, устанавливайте собственное. Вероятно, решение будет работать с рывком, поэтому надо подумать как его можно улучшить.

    Еще варианты можно попробовать отсюда:
    https://stackoverflow.com/questions/4770025/how-to...
    Ответ написан
  • Приложение на JS это своего рода сайт?

    В большинстве случаев, да.

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

    Другой разговор, что сайты работают самым разным образом, в то время как приложения обычно одностраничные.

    Иногда бывает компиляция из JS в нативное приложение, и тогда приложение написано на JS, но в результате используются немного другой набор технологий.
    Ответ написан
    5 комментариев
  • Как сделать переборку по классам?

    У вас HTMLCollection, а не массив, поэтому forEach нет.

    Два варианта:
    1. [...document.getElementsByClassName("allow")] для перевода в массив, и далее делаете forEach
    2. Если не нужна Live-коллекция элементов, используйте querySelectorAll чтобы найти элементы

    Вариант №2 обычно предпочтительнее.

    И, не меняйте всё свойство style, а лишь нужный стиль:
    e.style.background = 'red';

    Поэтому если записать всё максимально коротко, то:
    [...document.querySelectorAll('.allow')].forEach(element => {
      element.style.background = 'red';
    });
    Ответ написан
    3 комментария
  • Зачем нужна папка app в js приложениях?

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

    Так вот, в разработке тоже самое. Можно тесты хранить рядом с файлами, потому что они имеют прямое отношение к конкретной сущности. Можно и наоборот, хранить вне исходника приложения, потому что иногда считается что тесты это не код приложения, а прикладной код, который запускается только на этапе разработки, и делать ему рядом с кодом самого приложения нечего.

    На самом деле точек зрения больше.
    Просто в зависимости от идеи, можно хранить код в разных местах.

    Лично я предпочитаю именно вариант №1, потому что так и удобнее с позиции разработки (не надо лазить по файловой структуре, всё в одном месте), да и тесты неразделимы с разработкой (это часть разработки), в том числе документация решения, поэтому для меня это одно целое, поэтому я храню их вместе.

    Так вот, поэтому иногда есть разделение:
    app – код приложения
    test – код тестов
    ...море других папок (support/env/static/assets, и так далее).
    Ответ написан
    Комментировать
  • Что лучше использовать: qunit, mocha, jest?

    Есть несколько важных моментов при тестировании:
    1. Возможности библиотеки
    2. Скорость тестирования
    3. Популярность инструмента

    Так вот, Jest, по моему опыту использования, отвечает всем параметрам. Раньше был Jasmine (это база Jest, насколько я знаю), и там сильно не хватало параллельного запуска тестов, а в Jest это решили, и сейчас он очень быстро прогоняет тесты.

    Mocha не так популярна, да и из коробки есть не всё, надо или Chai ставить, потом Sinon, и так собирать нужное решение. Параллельного запуска тестов тоже из коробки нет. Поэтому, можно использовать, но придется самому собирать нужное решение под тестирование.

    QUnit не использовал, но всегда думал что это устаревшая штуковина

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

    Поэтому рекомендую Jest :+1:
    Ответ написан
    Комментировать
  • Фильтрация вложенных данных React?

    Я бы сделал два словаря (наборов соответствий данных):
    1. Название категории => Категория
    2. Название Item => Все категории с этим Item

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

    Словари можно составить один раз при получении данных.
    Всё написанное выше при условии что я правильно понял что вам нужно J
    Ответ написан
    Комментировать
  • Объясните как такое происходит с json?

    Если код не меняется, а выдача разная, дебажьте переменную $tamines
    Ответ написан
    1 комментарий
  • Как отрисовать график с помощью Js?

    Это уже не базовый график, судя по всему, и вам, вероятно, нужно работать с . Можно это сделать либо нативными средствами, либо есть такая библиотка, EaselJs, она довольно удобная – https://www.createjs.com/easeljs

    Если коротко, то она дает возможность описать структуру элементов, которые нужно отрисовать, и далее канвас перерисовывается в соответствии со структурой.
    Ответ написан
    Комментировать
  • Как вывести данный используя метод .map?

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

    Текущую структуру можно вывести так:
    const testdata = [
                {
                    category: ['Категория-1_1', 'Категория-2_1','Категория-3_1',],
                    attr: [ 'attr1', 'attr2', 'attr3'],
                },
                {
                    category: ['Категория-1_2', 'Категория-2_2','Категория-3_2',],
                    attr: [ 'attr1', 'attr2', 'attr3'],
                }
            ];
    
    const templates = testdata.reduce((acc, item) => {
      return acc.concat(...item.category.map((category, index) => {
        const attr = item.attr[index] || '';
        return `<button class='category-btn' data-categoty='${attr}'>${category}</button>`;
      }));
    }, []);


    На выходе будет массив:
    0: "<button class='category-btn' data-categoty='attr1'>Категория-1_1</button>"
    1: "<button class='category-btn' data-categoty='attr2'>Категория-2_1</button>"
    2: "<button class='category-btn' data-categoty='attr3'>Категория-3_1</button>"
    3: "<button class='category-btn' data-categoty='attr1'>Категория-1_2</button>"
    4: "<button class='category-btn' data-categoty='attr2'>Категория-2_2</button>"
    5: "<button class='category-btn' data-categoty='attr3'>Категория-3_2</button>"
    Ответ написан
    Комментировать
  • Почему мой функционал поделиться в вк, твиттер и фэйсбкук работает коряво, а на примере нет?

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

    403 Forbidden обычно указывает на ошибку с правами
    Как вариант, проверьте наличие прав у пользователя под которым стартует nginx на чтение директорий.
    Ответ написан
    Комментировать
  • Возможно ли прочитать excel средствами js?

    Есть вот такой пакет для чтения Excel, https://www.npmjs.com/package/xlsx

    Если нужен локальный файл, то обращаться к диску пользователя нельзя, запрещено браузером.
    В лучшем случае есть песочница (https://developer.mozilla.org/en-US/docs/Web/API/F...), запросы к локальным файлам, и FileReader.
    Ответ написан
  • Отправка формы в iframe(в самом iframe есть форма) - как?

    Судя по вашему сообщению, проблема не в форме. Обычная HTML форма при отправке формирует тело запроса (или query) и открывает страницу заданную в форме с нужным типом запроса (GET/POST).

    Поэтому здесь не может быть запаздывания или каких-либо задержек со стороны браузера, просто потому что это обычная загрузка страницы с другим методом и с телом запроса, полученным из формы.

    >я тут немного посидел, если кратко: функция "public function submit()" в файле-обработчике php(сама отправка на email) - до неё доходит обработка: в начале функции пишу die - срабатывает. Видимо iframe быстро перезагружается - и отправка отменяется, но это не точно.
    Судя по всему, проблема не в форме, если запрос доходит. Проверьте метод запроса, параметры запроса, заголовки, и если всё в порядке, тогда проблема в обработчике.
    Ответ написан
  • Совсем не понимаю как правильно анимировать? Что за баг?

    Рекомендую переписать на CSS @keyframes и описать всю анимацию от её старта и до конца. Тогда, вероятно, JS не понадобится от слова совсем (разве что классы повесить при наведении мышки), и работать будет стабильно (всё будет на стороне браузера).

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

    И надо бы классы сделать, но не могу найти сходу нормального примера. Идея такая же, как здесь https://docs.angularjs.org/guide/animations.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы когда панель поднималась до верхнего края браузера, то она останавливала своё движение?

    Не совсем понял задачу, но похоже вам нужен просто `position: sticky`. В этом случае элемент будет "приклеен" к границе окна при прокрутке страницы. Положение такого элемента относительно границ окна можно регулировать, насколько я помню, через `top`, `right`, `bottom`, `left`.

    https://developer.mozilla.org/en-US/docs/Web/CSS/p...
    Вот здесь есть пример как оно работает
    Ответ написан
    Комментировать