Задать вопрос
  • Как правильно удалить объект из массива?

    Никита Полевой: Вот можно на хабре почитать по части того что говорил выше https://habrahabr.ru/post/175283/

    Но это часть, а так советую почитать Стояна Стефанова - Шаблоны программирования и проектирования высококачественных приложений. Книга на 265 листов, но она того стоит.

    Потом можно и Дугласа Крокфорда почитать.
  • Как правильно удалить объект из массива?

    Никита Полевой: Предлагаю погуглить, потому что так на пальцах не смогу рассказать. Или ещё проще нагуглите инструмент jslint и всё увидите.

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

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

    По части инкремента, автор объясняет что с помощью него легче достичь ошибку.
  • Как правильно удалить объект из массива?

    Никита Полевой: >>>Не очень понял, ну и что?

    Всё потому, что этот код Single Page Application, это не полный кусок, а вообщем он ещё делает ajax запрос, подгружает нужный контент и делает активной кнопку.

    >>>Все как доктор, то бишь Илья Кантор, прописал
    >>>ну это уже вообще какая-то соционика) Это-то почему не правильно?

    Почитайте по этому поводу Стояна Стефанова "Шаблоны" и погуглите кто такой лингвист языка js Дуглас Крокфорд, Илья не панацея. Также посмотрите если будет желание канал на ютубе "Sorax", вы поймёте о чём тогда говорю.
  • Регулярное выражение для разбивки строки на отдельные слова?

    Alexey: Насчёт "ё" вы правы, не знал что она в диапазон не входит. С пробелами в начале упустил, моя вина.
  • Нужна ли библиотека jQuery для front-end?

    Денис Инешин: >>>Query очень сильно облегчает работу с DOM, c событиями.

    В принципе в js нативном сложности как таковой не ощущаю. jq, лаконичнее, меньше кода.
  • Как правильно удалить объект из массива?

    Никита Полевой: У вас во втором примере по последней ссылке, переменная location объявляется в глобальной области видимости, а она там не нужна до возникновения события.

    И не комильфо использовать несколько инструкций объявлений, оптимальнее использовать "шаблон единственной инструкции объявления".

    Также по части фигурных скобок, ай-ай-ай, jslint будет очень сильно и долго ругаться.

    Переменная i++, тоже лучше так не делать, а использовать i += 1.
  • Как правильно удалить объект из массива?

    Никита Полевой: Согласен, что если уж прямо на "клиенте" нужна будет производительность, то конечно же нужно будет подумать не только о лаконичности.

    Но, если говорить уж прямо о производительности работая с "массивами" и если эти массивы предполагаются быть только числовыми, то актуальнее использовать типизированные массивы, где прирост скорости будет достаточно хороший, а также память будет не так течь как при использовании обычных массивов. Пример "Решето Эратосфена", который как говорит Дэвид Флэнеган в своей книге, работает в 23 раза быстрее если использовать типизированные массивы, чем с применением к примеру обычных массивов.

    Пример:

    function sieve(n) {
        var a = new Array(n+1), // Тут нужно заменить на Int8Array чтобы увидеть разницу
            max = Math.floor(Math.sqrt(n)),
            p = 2,
            i;
        while (p <= max) {
            for (i = 2 * p; i <= n; i += p) {
                a[i] = 1;
            }
            while (a[++p]){}
        }
        while (a[n]) {
            n--;
        }
        return n;
    }


    С помощью примитивной функции, можно посмотреть в консоли результат:

    function speed(callback, arg) {
        var start = Date.now();
        callback(arg);
        console.log("Заняло:", Date.now() - start, "ms");
    }
    
    speed(sieve, 500000);


    При передаче небольших значений, разница будет не существенна, а вот если как в моём примере, разница уже ощутимая. С Array в Chrome - от 10 до 32 мс, тогда как с Int8Array - от 5 до 9 мс. В Firefox - Int8Array от 3 до 7 мс, Array от 133 до 139 мс. В других браузерах не смотрел.

    Вот это действительно классная весчь.
  • Регулярное выражение для разбивки строки на отдельные слова?

    Alexey: Задачу поставил автор поста:
    >>>В str может быть всё что угодно, это ввод пользователя.

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

    Вторая регулярка уже лучше, но можно диапазон задать проще [a-zа-я] и установить флаг ignoreCase.
  • Как правильно удалить объект из массива?

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

    Интересное утверждение что методы класса Array будут работать медленнее чем обычные циклы, но спорить не буду так как реализацию их на С++ не смотрел.

    Например я использую метод forEach после выборки из документа ссылок и косвенного вызова относительно класса Array, делаю по ним проход и в зависимости от свойства hash объекта location добавляю класс active, или удаляю класс active например вот так:

    var buttons = document.querySelectorAll("#buttons a");
    
    function handler() {
        var sel = location.hash.slice(1);
        location.hash = sel || "#home";
        [].slice.call(buttons).forEach(function (elt){
            elt = elt.getAttribute("href").slice(1) === sel
                ? elt.classList.add("active")
                : elt.classList.remove("active");
            
        });
    }
    
    window.addEventListener("hashchange", handler);
    window.addEventListener("load", handler);


    UPD
    Это примитивный конечно же пример, лучше реализовать c помощью метода history.pushState() и события "popstate". Но это наглядный пример показывающий более простое решение, когда на лету обращаемся к методу forEach и выполняем поставленные задачи.
  • Как правильно удалить объект из массива?

    Никита Полевой: >>>Ну так и напишите другой вариант тоже, хотя бы для энциклопедичности.

    Так что там писать, не смешите, его уже написали за меня, заменив map на filter с присваиванием в массив, или для вас это задача?!
  • Как правильно удалить объект из массива?

    Никита Полевой: >>>ибо простой проход по вашему массиву по длительности переплюнет даже временные затраты на slice()
    >>>таким образом использование базовых циклов будет затруднено лишними проверками и замедлено (в ~50 раз), а использование методов типа forEach будет сильно замедлено (в ~20 раз)

    Ещё раз, ещё много-много раз. Вы либо не читаете что я пишу, либо ваши слова сарказм.
    1) Есть методы которые появились в ES5, поэтому для обхода массивов разумнее использовать их, циклы оставим для других задач.
    2) Выделю жирным часть подстроки чтобы уже наверняка. Колбэк функция не будет вызываться для несуществующих элементов массива.
    3) По ссылкам не ходил, я читаю спецификацию. Скорость может не только зависеть от циклов, а ещё и от железа, от среды относительно чего выполняется код, от задач которые поставлены перед кодом и т.п.
  • Регулярное выражение для разбивки строки на отдельные слова?

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

    Никита Полевой: Скорость !== Правильно, так что давайте не будет утрировать и взглянем правде в глаза, ТС просил без определения нового массива, он получил, попросил бы новый массив с учётом скорости, писался бы код совершенно другой.
  • Как правильно удалить объект из массива?

    Никита Полевой: Так ведь выше уже ответил по части вашего вопроса, нужно "понимать" для чего сий код будет юзаться и уже от этого отталкиваться. В данном случае никаких итераторов и в помине нет, используется метод map, колбэк которого не вызывается для элементов со специальным значением "undefined".

    И теперь отталкиваемся от запроса ТС и видим что он хотел, чтобы не создавался новый массив, а из существующего удалялся объект под соответствующим id.

    >>> Да, можно создать пустой массив и пробежаться по объектам в массиве data, если id у объекта не совпадает с id, который я пропишу, тогда добавляем массив и в итоге получится новый массив без одного объекта. Но может можно как-то ещё сделать?
  • Как правильно удалить объект из массива?

    Никита Полевой: >>> И чем же лучше иметь дырявый массив?
    Я не понимаю что вы имеете ввиду под словом "дырявый".
    Разреженный массив теряет последовательность индекса и для него не вызывается колбэк в ES5, так в чём же его избыточность?!
  • Как правильно удалить объект из массива?

    Николай: Можно если подходить к делу со знанием, а не с интуитивным пониманием того что происходит и ты с уверенностью будешь знать каков будет итог.
  • Как выполнить действие при нажатии на ссылку?

    Никита: Если есть функция которая задает переход к другой странице, то логичнее в этот момент и передавать hash в href. Если у вас с основами пробелы, то выбираете саму ссылку куда нужно передать href и присваиваете как свойству объекта HTMLElement.
  • Чем может быть полезен C++ веб разработчику?

    ivsol
    @ivsol Автор вопроса
    wasm.ru говорит обратное:


    Для программистов самое интересное – это то, для генерации приложений в WebAssembly можно будет использовать не JavaScript, а другие языки. Первым, для кого делается поддержка, является C++. Ветераны указатели и шаблонов снова впереди


    Ссылка на саму статью: wasm.ru/article/536
  • Чем может быть полезен C++ веб разработчику?

    ivsol
    @ivsol Автор вопроса
    Олег Цилюрик: Этот форум аля 2000-е, там такие люди были как Great, Clerk, Vazonez и многие другие, которых знает почти весь рунет, трёпа там никакого нет, там в основном элита низкоуровневого.