Задать вопрос
  • Как скрыть часть текста в блоке?

    bingo347
    @bingo347 Куратор тега JavaScript
    L1nw0od, почему именно 100, а не скажем 101?
  • Как скрыть часть текста в блоке?

    bingo347
    @bingo347 Куратор тега JavaScript
    L1nw0od, если по правильному, то это делается явно не по длине строки. Разные символы имеют разный размер, если мы конечно не с моноширным шрифтом имеем дело. На глаз гораздо приятнее когда несколько блоков одного размера. Соответственно и текст надо скрывать не по символам, а по занимаемому месту.
    Вообще с этим прекрасно справится CSS, а значит на JS это делать не стоит, JS тут максимум класс должен перещелкивать по нажатию на кнопку "далее"
  • Как исправить проблему с git push?

    Только учусь. Когда пойму что можно отсеять, размер уменьшится

    woodT, уменьшить размер git репозитория можно только удалив его, на то он и нужен, чтоб хранить историю от самого первого коммита
  • Как работает типизация в данном случае?

    bingo347
    @bingo347 Куратор тега TypeScript
    Lynn «Кофеман», я бы даже сказал, что правильнее было бы написать так, но axios через такой дженерик позволяет пользователю библиотеки указать любую чушь в качестве возвращаемого типа.

    если честно, меня вообще удивляет, за счет чего это кривое поделие так популярно...
  • Наследование приватных полей и методов?

    Максим Федоров, Nickname192, я вот не очень то знаю java, но неужели компилятор понимает psvm?
  • Какую БД выбрать для бекенда на node js (express)?

    bingo347
    @bingo347 Куратор тега Node.js
    У монги есть прикольное преимущество перед РСУБД - не нужно заранее определять схему данных.

    Василий Банников, как по мне, весьма спорное "приемущество"... на этапе прототипирования может быть, но на этапе продукта это превратится в головную боль и для админов и для разрабов, а для бизнеса так вообще в лишние расходы.
  • Как получить индекс объекта в localStorage?

    bingo347
    @bingo347 Куратор тега JavaScript
    Ruslan, localStorage - это простейшее key-value хранилище, порядок не гарантируется.
    Но если честно, я бы все вообще в двух полях хранил:
    1. Исходное состояние, до которого максимально можем сделать undo
    2. Список изменений, которые нужно применить к исходному состоянию, чтоб получить текущее
  • Как сделать несколько событий?

    bingo347
    @bingo347 Куратор тега JavaScript
    WbICHA, bind так же под капотом создает функцию, так что в обоих случаях количество хранимых в памяти функций будет линейно зависеть от количества итераций.
    Но вот затраты ресурсов будут разные.
    По памяти v8 для каждой функции хранит 2 js объекта (OrderedHashMap) для замыкания и для самой функции как объекта, GC smart pointer (пол машинного слова и остается валидным после memory move через механизмы GC) на AST ноду, статистику использования (при создании функции пустая коллекция) и машинный код (при создании нет, первая компиляция происходит после 2-3 запуска через интерпретатор и сбора статистики). Так вот, размер статистики и машинного кода напрямую корелирует с размером AST поддерева для функции. То есть для оптимизации по памяти лучше чтоб в цикле создавались простые функции, а сложная была в единственном экземпляре.
    По производительности думаю и так понятно, повторяющиеся действия лучше вынести как за цикл так и за функцию. Особенно это критично с регулярками, которые компилируются отдельным движком не очень то дружащим с оптимизациями turbofan.

    Это все теория, на практике все сильно зависит от того, что скрыто под { ... } и сложнее ли оно, чем внутренности bind, с которым вообще не просто это посчитать, так как в последних версиях v8 все встроенные функции переписаны с js на torque (свой яп v8, помесь js и плюсов и компилируемый в плюсы).

    Вообщем, я бы предложил такой вариант для сложных функций:
    const f = (e, a, b) => { ... };
    // loop
      .addEventListener('click', e => f(e, 1, 2));
    Так наплодим функций из единственного call expression, а все остальное вынесем в единственную f.
    А если f и сама состоит из единственного выражения, то вообще ничего не выносить и плодить ее в цикле.
    Но лучшим вариантом конечно останется, когда внешняя f как есть передается в addEventListener, а данные она получит через объект Event
  • Как сделать несколько событий?

    bingo347
    @bingo347 Куратор тега JavaScript
    К примеру, так:
    arr = [1,2,3]
    arr.forEach((val, index, scope) => {
    scope[index] = val * 2;
    })
    console.log(arr);
    // 2,4,6

    Николай Ланец, и чем map меня защитит от такого быдлокода?
    const arr = [1,2,3]
    arr.map((val, index, scope) => {
      scope[index] = val * 2;
    });
    console.log(arr); // 2,4,6
  • Как создать обертку вокруг HttpClient?

    bingo347
    @bingo347 Куратор тега TypeScript
    acwartz, зачем такое надо, это к G F, а вот работает за счет дженерика, которым связаны аргумент и возвращаемый тип, но так как в аргументе дженерик поля не обязательные, я добавил тип по умолчанию в дженерик
  • Как сделать несколько событий?

    bingo347
    @bingo347 Куратор тега JavaScript
    разве движок это не оптимизирует?

    WbICHA, к сожалению нет, по просту не может, иначе бы removeEventListener работал некорректно. Там что то вроде Set<EventListener> под капотом, поэтому
    for(let i = 0; i < 10; i++) {
      node.addEventListener('event', () => {});
    }
    сожрет в 10 раз больше памяти, чем
    const f = () => {};
    for(let i = 0; i < 10; i++) {
      node.addEventListener('event', f);
    }
    Не говоря уж о том, что каждая из этих функций компилируется и оптимизируется по отдельности.
    По крайней мере в v8 так, другие движки я не раскапывал.
  • Как сделать несколько событий?

    bingo347
    @bingo347 Куратор тега JavaScript
    Николай Ланец, на личности никто не переходил, это Ваши влажные фантазии, как и назвать некий проект своим, сделав одноименный репо на гитхабе, который к тому же "forked from prisma-cms/nextjs" и самый старый коммит в котором датируется 11 октября 2020... Ну и вообще странное суждение у Вас о профессионализме, по тому что на личном домене висит заглушка...

    Кстати, натыканный наугад "урок": https://freecode.academy/learn/exercises/587d7b7b3...
    И у меня уже сочувствие, к тем кто по этому так сказать материалу будет учится...

    А можно воспроизводимый пример, как forEach мутирует массив, а не статью ноунейма с ресурса где любой студент может писать статьи для зачета?
  • Как удалить неразрывный пробел из строки?

    bingo347
    @bingo347 Куратор тега JavaScript
    Руслан Минулин, конкретно у элемента A он просто возвращает значение свойства href. У других элементов поведение может отличаться. И хотя в href - строка, думаю не совсем та, что Вам нужна.
    Ну и вопрос на засыпку, зачем удалять какие то символы с помощью JS, когда это можно сделать в редакторе кода?
  • Как сделать несколько событий?

    bingo347
    @bingo347 Куратор тега JavaScript
    WbICHA, я бы еще добавил, что создание функции нужно выносить за цикл, а не плодить миллион однотипных
    Николай Ланец, вот Вам так удобнее/короче наговнокодить, а потом у людей web/electron тормозят и имеют дурную славу...
    1. Короче (имеется ввиду map короче, чем forEach).
    а заодно выполняет гораздо больше действий под капотом, среди которых создание нового массива исходного размера, а значит дополнительные аллокации/резервирования памяти и приближение такта сборки мусора.
    2. Замыкания и безопасность исходного массива (чтобы внутри цикла не изменить случайно элементы массива, если это массив не просто скаляров, а объектов).
    Вообще бред. forEach не мутирует исходный массив и замыкание точно такое же делает. В чем безопасность то выше у map?
  • Как удалить неразрывный пробел из строки?

    bingo347
    @bingo347 Куратор тега JavaScript
    document.addEventListener('DOMContentLoaded',);  // Жду загрузку страницы
    Вы уверены? ничего Вы ни ждете...

    var links2 = links.toString().replaceAll(/\s{2,}/g, '').trim(); // Пытаюсь очистить от лишнего и лишних пробелов
    что по Вашему должен делать метод toString на DOM ноде?
  • Как создать обертку вокруг HttpClient?

    bingo347
    @bingo347 Куратор тега TypeScript
    G F, кстати, вот еще в исходниках нарыл:
    https://github.com/angular/angular/blob/11.0.8/pac...
    по сути у HttpClient метод put и сам обертка над методом request, что-то мне подсказывает, что вот так можно без приведения типов обойтись:
    put<O extends ObserveWrappers = 'body', R extends ResponseTypes = 'json'>(params: Params<O, R>): Result<O, R> {
        const {url, body, options} = params;
        return this.http.request<any>('PUT', url, {...options, body});
    }
  • Как фильтровать данные?

    bingo347
    @bingo347 Куратор тега JavaScript
    timesanty, если упростить код и привести к единому стилю, то можно вообще вот так:
    filterBox.forEach(elem => {
        elem.classList[filterData === 'all' || elem.dataset.filter === check
            ? 'remove'
            : 'add'
        ]('hide');
    });
  • Как правильно задать градиент?

    bingo347
    @bingo347 Куратор тега HTML
    timesanty, если поддержка устраивает, то вполне: https://caniuse.com/css-variables
  • Задачка с mate academy?

    bingo347
    @bingo347 Куратор тега JavaScript
    sarv4n, на будущее, код картинками запрещен правилами. Да и просто, откройте свой вопрос с телефона...
  • Почему несмотря на устаревание HTML, CSS и JavaScript не делается шагов в сторону альтернатив, отвечающим спросу рынка веб-разработки?

    Roman Sokolov, ну и так, для сравнения, возьмем условный
    <p>Hello world!</p>
    на Yew оно будет весить примерно 1 мб .wasm + 0.5 мб .js обертки
    на Svelte - меньше 1 кб и работать в разы быстрее