Проекции и отображения наборов данных в JavaScript

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ต.ค. 2024

ความคิดเห็น • 30

  • @timashoff
    @timashoff ปีที่แล้ว +1

    Спасибо большое! давно для себя заметил, что примеры с reduce как то легче читаются, код компактнее и лаконичнее выглядит, все рядом

  • @romanserebrov4718
    @romanserebrov4718 2 ปีที่แล้ว +2

    Тимур спасибо Вам огромное, отличные примеры, работа с данными одна из самых интересных тем для меня лично ))

  • @anatolykobzisty9827
    @anatolykobzisty9827 5 ปีที่แล้ว +9

    00:00:00 Введение
    00:01:50 Простая проекция набора данных
    00:09:23 Расширенная проекция набора данных
    00:19:00 Расширенная проекция набора данных с кэшированием списка ключей
    00:20:27 Оптимизация проекции набора данных с помощью императивного программирования
    00:23:11 Линзы из функционального программирования
    00:32:29 Сложная проекция набора данных ( проекция изнутри и снаружи )
    00:39:08 Сложная проекция набора данных с помощью декларативного программирования
    00:41:57 Оптимизация сложной проекции
    00:51:36 Синтаксис фильтрации
    00:53:25 Вывод
    00:58:08 Оптимизация
    01:00:00 Обобщение

  • @МаксимКоковин-и9к
    @МаксимКоковин-и9к 4 ปีที่แล้ว +3

    Мне очень нравятся такие абстракции, аж мурашки по коже!!!)

  • @Andrey-qf8uw
    @Andrey-qf8uw 4 ปีที่แล้ว +3

    Круто як завжди!

  • @serjio8781
    @serjio8781 2 ปีที่แล้ว +2

    Топ контент, спасибо!

  • @uaplatformacomua
    @uaplatformacomua 2 ปีที่แล้ว +2

    Тимуре, який ти класний препод 👍

  • @TheTexPro
    @TheTexPro 2 ปีที่แล้ว +1

    Спасибо большое!

  • @Karmazins
    @Karmazins 5 ปีที่แล้ว +6

    medium.com/javascript-scene/lenses-b85976cb0534
    Мне помогло допонять линзы :)

  • @ИванПетров-б8в6щ
    @ИванПетров-б8в6щ 3 ปีที่แล้ว +4

    Ни@я не понял , но оочень интересно ! ))

  • @Antonio-fm1sq
    @Antonio-fm1sq 3 ปีที่แล้ว +1

    Спасибо

  • @ЙййЙйй-п8б
    @ЙййЙйй-п8б 4 ปีที่แล้ว +1

    Заковырка какая то примерчик с редьюсами с метаданными .. сложная абстракция... Это в вызове первый аргумент - методанные из партиал с , а второй аргумент (obj) откудова из мэпа получается приходит ? и этот obj приходит через рест параметры . так что ли ?

  • @antonanton22743
    @antonanton22743 6 ปีที่แล้ว +3

    Спасибо )

  • @victormog
    @victormog 7 หลายเดือนก่อน +1

    Что-то я не понял, а не проще сделать класс, в который передавать объект, а его конструктор отберёт и преобразует, если нужно, любые нужные поля.

    • @TimurShemsedinov
      @TimurShemsedinov  7 หลายเดือนก่อน +1

      Не проще, с классом в каждом случае нужно писать императивный код, а с проекцией просто декларативную структуру, она и нагляднее и пишется проще и тестировать ее не нужно, по сути это схема, а не код

    • @victormog
      @victormog 7 หลายเดือนก่อน +1

      @@TimurShemsedinov поверю Вам на слово, т.к. ещё, видимо, не дорос до такого... Я DTO через класс организовываю...
      Попробую осмыслить это видео. Спасибо!

  • @romankovalchuk8648
    @romankovalchuk8648 6 ปีที่แล้ว +1

    Спасибо еще раз (случайно удалил предидущий коментарий) . Вот код разширеный projection для работы с вложеными дикшинари, без оборачивания в класс. Вы совершенно верно заметили, что просто так этого делать не нужно.
    const projection = (meta) => {
    const keys = Object.keys(meta);
    // debugger;
    const mapper = obj => {
    const hash = {};
    for (const key of keys) {
    const def = meta[key];
    const [name, transform] = def;
    let val = obj[name];
    if (val !== void 0) {
    if (transform) {
    const cls = Object.prototype.toString().call(transform).slice(8,-1);
    switch(cls){
    case 'Function': val = transform(val);break;
    case 'Object': val = projection(transform)(val);break;
    case 'Array': val = val.map(projection(transform));break;
    }
    }
    hash[key] = val;
    }
    }
    return hash;
    };
    return mapper;
    }

  • @RK-gm4pd
    @RK-gm4pd 9 หลายเดือนก่อน

    тяажкувато сприймається... доки в консоль не виведеш проміжні результати, важко слідкувати. і консолів треба не мало

  • @vsuschenko
    @vsuschenko 5 ปีที่แล้ว

    какая рекурсия в projection? где вы ее увидели?

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว

      на какой минуте?

    • @vsuschenko
      @vsuschenko 5 ปีที่แล้ว

      @@TimurShemsedinov 7:25

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว

      @@vsuschenko а, ну конечно, reduce приводит к косвенной рекурсии или непрямой рекурсии. В reduce передается колбэк, и по завершению этого колбэка reduce его повторно вызывает. Это все равно, что рекурсия.

    • @vsuschenko
      @vsuschenko 5 ปีที่แล้ว +5

      @@TimurShemsedinov там то же самое, что и в методе map. или forEach. просто передается результат который колбек вернул на предыдущей итерации. причем тут рекурсия? developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce почитайте описание. там внизу и полифил есть для старых браузеров. как видно - никакой рекурсии. обычный цикл.

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว +9

      @@vsuschenko сори, это я функциональным программированием перезанимался, классический функциональный reduce он рекурсивный, потому, что нельзя циклы писать, вот он: const reduce = (fn, acc, [cur, ...rest]) => cur === undefined ? acc : reduce(fn, fn(acc, cur), rest); Я согласен, что у Array.prototype.reduce действительно сделан на циклах, но это видно не из-за полифила, он все же написан на C++ внутри V8, а понятно это из-за того, что не случается переполнения стека на reduce огромных массивов.

  • @bodfxua7698
    @bodfxua7698 3 ปีที่แล้ว

    Не спорю все круто но чисто для мене важко навчатись в такому режимі перегляду слайдів дуже багато чого не зрозуміло((

  • @randomtron
    @randomtron 3 ปีที่แล้ว

    > JavaScript выработает скрытый класс.
    Вообще-то движок, в нашем случае V8, выработает скрытый класс.

    • @Cheetaqueue
      @Cheetaqueue 2 ปีที่แล้ว

      как же ты хорош, указал автору на его ошибку

  • @RisDeep
    @RisDeep 4 ปีที่แล้ว +4

    Сложно написанный код. Несколько заходов, всё ещё не досмотрел.

    • @TimurShemsedinov
      @TimurShemsedinov  4 ปีที่แล้ว +2

      Ну это же не первая лекция, нужно начинать с простого