Учимся писать глубокий merge и сравнение объектов и массивов | Уроки JS

Поділитися
Вставка
  • Опубліковано 7 чер 2024
  • Будем целиком воплощать функции deepMerge & deepCompare без библиотек на чистом JS через рекурсию + разберём различны тонкости JS.
    🍀 Поддержать канал: www.donationalerts.com/r/webe...
    ☕️ Купить кофе: buy.stripe.com/5kA7sL9574SG7x...
    🎨 Купить набор кистей Procreate: webelart.com/illustration.
    ✍️ Мой telegram channel: t.me/webelart
    🏰 Английский UA-cam: @webelart_en
    💁🏼‍♀️ Инстаграм: / webelart
    🦄 LinkedIn: / webelart
    ❤️ Поддержать развитие канала: / webelart
    🌱Старт урока: github.com/liveldi/deep_merge...
    Рекомендуемые видео в уроке:
    ⭐️ Рекурсия и стек в JavaScript: • Рекурсия и стек в Java...
    ⭐️ Пишем полифилы на JavaScript: • Пишем полифилы на Java...
    00:00 Введение.
    00:57 Скачиваем проект с подготовленными тестами.
    02:05 Постановка задачи deepCompare + теория ссылочных типов данных.
    06:29 Особенность null в JavaScript.
    08:20 Приступаем к написанию deepCompare.
    10:54 Пишем дополнительные helpers.
    12:45 Как можно проверить тип данных в JS.
    18:02 Таблица приоритетов JS.
    20:11 Получение ключей объекта Object.keys().
    24:08 Тестируем функцию deepCompare.
    25:09 Постановка задачи deepMerge.
    27:46 Теория про мутирование данных.
    28:52 Про глубокие объекты и важность их копии.
    31:28 Приступаем к реализации deepMerge.
    32:41 Пишем deepCopyArrays & deepCopyObjects.
    38:32 Про JSON.stringify().
    39:53 Пишем deepMergeArrays.
    40:40 Пишем deepMergeObjects.
    45:13 Тестируем deeMerge.
    46:13 Рефакторим deepCopyArrays & deepCopyObjects в deepCopy.
    На канале я рассматриваю различные темы веб-разработки, на текущий момент: веб-основы, веб-анимации, веб-дизайн.

КОМЕНТАРІ • 51

  • @gagogoga794
    @gagogoga794 2 роки тому +17

    Эта девушка несёт свет людям… продолжай в том же духе ))

  • @user-iz9qp7np4q
    @user-iz9qp7np4q Рік тому

    Так всё сложно и непонятно.. Умная девушка.. Побольше бы таких красавиц и жизнь в стране наладилась

  • @user-of3yg1me6m
    @user-of3yg1me6m 2 роки тому +9

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

    • @webelart
      @webelart  2 роки тому

      ❤️❤️❤️

  • @alenache1
    @alenache1 2 роки тому +2

    видно, что человек увлеченный, всегда приятно таких смотреть

  • @user-kn3ut1sh2o
    @user-kn3ut1sh2o 2 роки тому

    Спасибо за полезный контент!
    (глубокий merge, сравнение объектов и массивов | Уроки JS)

  • @user-mh9pe4zp6l
    @user-mh9pe4zp6l 2 роки тому +1

    Огромное Вам спасибо, это видео помогло мне решить проблему, с которой я 2 дня боролся)

  • @aleksandrgurnak3911
    @aleksandrgurnak3911 2 роки тому +1

    Отлично, спасибо большое!🙂👍

  • @egoist2956
    @egoist2956 2 роки тому +3

    Классное видео. Леночка - ты супер умничка..)

  • @RedShucov
    @RedShucov 2 роки тому

    Елена, у Вас очень хорошие видео.
    Интересно Вас слушать и монтаж хороший.

  • @biLLie_wiLLie
    @biLLie_wiLLie 2 роки тому +2

    Лена, это было очень глубоко

  • @ooops4333
    @ooops4333 Рік тому

    Господи почему я не был раньше на неё подписан! Спасибо тебе большое +1 в подписку!

  • @StunIsLoveChik
    @StunIsLoveChik 2 роки тому +1

    Огонь!!!

  • @estarosa_light
    @estarosa_light 2 роки тому +1

    Вот и пробили 10 тысяч🥳

    • @webelart
      @webelart  2 роки тому

      Даааа!!! 😍

  • @Ramosok
    @Ramosok 2 роки тому

    спасибо!

  • @eugenefedoryachenko8793
    @eugenefedoryachenko8793 Рік тому

    На сколько я помню поверхностная копия - это ссылка на объект. Именно ее делает любое копирование обьектов в JS. Вероятно когда Вы меняете result, то меняется и Arr)
    А для глубокой копии можно использовать метод structuredClone()
    Поддержка у него пока что средняя

  • @mind150
    @mind150 2 роки тому

    кайф))

  • @user-te4zh2dz9r
    @user-te4zh2dz9r Рік тому

    Добрый вечер. А видео про backtracking будет?

  • @andreyzhukov2821
    @andreyzhukov2821 2 роки тому

    Для глубокого копирования объекта можно использовать функция Object.prototype.structuredClone()

    • @webelart
      @webelart  2 роки тому

      Прикольно, но пока ещё рановато, только только поддержка появляется.

  • @YuriiKratser
    @YuriiKratser Рік тому

    Не легко Пойду к жене спрошу что она знает про глубокий мердж

  • @mico6762
    @mico6762 2 роки тому +1

    Это все, конечно, круто, но разве нельзя использовать просто JSON.stringify() для deepCompare?

    • @webelart
      @webelart  2 роки тому +2

      В текущей задаче не получится. Я его упоминала тоже в уроке. Например вот такой кейс JSON.stringify({a: 1, b: 2}) !== JSON.stringify({b: 2, a: 1}). Объекты нам не гарантируют порядок ключей.
      + Там ещё есть особенности благодаря которым JSON.stringify не желательно также использовать для глубокой копии. Например, все функции в объекте приобретут значение null.

    • @mico6762
      @mico6762 2 роки тому

      @@webelart понял, спасибо

  • @user-cc2lp9tz7r
    @user-cc2lp9tz7r 2 роки тому

    Дипкомпэйр не учитывает что функции сравниваются по ссылке?
    var a = function(x,y) {return x + y}
    var b = function(x,y) {return x + y}
    a===b //false
    b.toString()===a.toString() //true
    a.valueOf() === b.valueOf() //false

  • @user-yb5bx2ki4q
    @user-yb5bx2ki4q 2 роки тому

    Леночка запишите курс JS с нуля до профи

    • @goojoke3161
      @goojoke3161 2 роки тому +5

      Зачем ? Итак много курсов для нулевых. Лучше что-нибудь сложное, похожее на этот урок

  • @user-rh8jg2fb5t
    @user-rh8jg2fb5t 2 роки тому

    И для рекурсий желательно сделать предохранитель что мало ли случайно в каком то кейсе оно не вечно херячило

    • @webelart
      @webelart  2 роки тому

      :D Ну там есть по умолчанию 10-100к вызов и всё даже самый стойкий интерпретатор сдастся. Я ещё думала прикольно бы текущие примеры без рекурсии реализовать, как раз чтобы этой границы не было, но надо думать. Рекурсия здесь конечно выглядит более красиво.

    • @user-rh8jg2fb5t
      @user-rh8jg2fb5t 2 роки тому

      @@webelart не ну идея конечно классная , молодец
      P.S. а вы говорите реторн для return

    • @mind150
      @mind150 2 роки тому

      @@user-rh8jg2fb5t а еще она говорит "нода" ))) и что)) мне кажется, очень мило.

    • @user-rh8jg2fb5t
      @user-rh8jg2fb5t 2 роки тому

      @@mind150 неа, она говорит нодА (ударение на последний слог) я не сразу понял о чем она говорит , но это такое, мелочь

  • @mushnikov35
    @mushnikov35 2 роки тому

    НЕ совсем понял как открыть папку из терминала в vscode, про code . - команду знаю, а вот как ту папку открыть в которой нахожусь загадка...

    • @webelart
      @webelart  2 роки тому

      Ммм, можно открыть просто через сам vs code: File -> Open Folder. Или ещё есть File -> Add Folder to workspace

  • @magomedaminov4583
    @magomedaminov4583 2 роки тому

    Will you be my mentor?

    • @webelart
      @webelart  2 роки тому +1

      Unfortunately I am not mentor people yet, but may be will think about it in the future ❤️

    • @magomedaminov4583
      @magomedaminov4583 2 роки тому

      @@webelart Well, I had to try. Thank you for your useful content, I like it!

  • @catsapp
    @catsapp 2 роки тому

    Подождите я не успеваю

    • @webelart
      @webelart  2 роки тому +1

      Жми на паузу. Ииии полный вперёд!! ❤️

  • @user-rh8jg2fb5t
    @user-rh8jg2fb5t 2 роки тому +1

    Приоритет логических операторов это конечно хорошо, но где гарантия шо твой колена такой смышлёный как ты и также читаемость кода как то не очень то, обернуть в скобки много времени не займет ! А также конструкцию с прототипами в хелперах неплохо бы вынести в отдельную функцию

    • @webelart
      @webelart  2 роки тому

      Мне вот кстати наоборот не нравится когда со скобками перебор. Вообще с количеством условий в одном if лучше конечно не перебарщивать в целом.
      Про вынести, можно конечно, например константу сверху файла объявить, что-то типа const {toString} = Object.prototype; и юзать.

    • @user-rh8jg2fb5t
      @user-rh8jg2fb5t 2 роки тому

      @@webelart ну выносить я бе не советов, инкапсулировать в функции было норм. А на счёт проверок в if есть у меня пример но не слабо нервных он и может даже травмировать

    • @webelart
      @webelart  2 роки тому

      @@user-rh8jg2fb5t Даже страшно представить, что у вас за пример с if 😅😅😅

    • @user-rh8jg2fb5t
      @user-rh8jg2fb5t 2 роки тому

      @@webelart высота 4-5 строк (не помню точно) и длинна всего этого в два екрана (Моник 1920 пикселей ширину). Как же меня передергивало когда я открывал этот файл.....в том проекте были и другие перлы конечно но этот if затмил все

  • @ostrov11
    @ostrov11 2 роки тому

    ... хоспаде, это штоле жава ???

  • @user-qb6jj4dv6k
    @user-qb6jj4dv6k 2 роки тому

    сложноватенько