@JSlang

Страница 2218 из 2237
Dima
19.10.2018
18:22:54
Object.assign присваивает свойства в целевой объект, а не копирует. Поэтому срабатывают и сеттеры и геттеры.
Кстати есть встроенный аналог, который копирует свойства рекурсивно и заменяет только значения если в целевом объекте уже есть ещё один объект, а если нету, то дополняет?

Типа array_merge_recursive , аналог в php

?? Denis
19.10.2018
18:25:01
$.extend (с параметрами же)

Google
?? Denis
19.10.2018
18:25:50
$.extend(true, obejct1, object2, object3, ... )

Andrew
19.10.2018
18:28:05
Viktor
19.10.2018
18:28:06
This method is like _.assign except that it recursively merges own and inherited enumerable string keyed properties of source objects into the destination object. Source properties that resolve to undefined are skipped if a destination value exists. Array and plain object properties are merged recursively. Other objects and value types are overridden by assignment. Source objects are applied from left to right. Subsequent sources overwrite property assignments of previous sources.

Andrew
19.10.2018
18:28:43
Можно нативной, я тебе выше написал

Viktor
19.10.2018
18:29:24
Object.assign( {}, {})
он умеет делать рекурсивно?

Andrew
19.10.2018
18:30:05
По мойму да

Dima
19.10.2018
18:30:07
Ясно, спс. Да видел loadash, богатая библиотека. Просто хотелось чего-то простого из коробки, без дополнительных либ.

Andrew
19.10.2018
18:30:17
Проверь

Viktor
19.10.2018
18:30:17
Andrew
19.10.2018
18:30:27
))

Google
Andrew
19.10.2018
18:30:40
То есть только 1 уровень?

Viktor
19.10.2018
18:32:41
Ясно, спс. Да видел loadash, богатая библиотека. Просто хотелось чего-то простого из коробки, без дополнительных либ.
из коробки много чего нет) поэтому есть столько утилитарных библиотек (ramda, lodash, underscore)

То есть только 1 уровень?
да, только 1й уровень, где примитивы копируются по значению, объекты и функции - по ссылке

То есть только 1 уровень?
насколько я понял, человеку нужен был deepMerge/deepClone

Andrew
19.10.2018
18:34:25
Ну похоже)

Max
19.10.2018
18:34:29
Можно и без лодаша: function deepClone(o) { return new Promise(resolve => { const { port1, port2 } = new MessageChannel(); port2.onmessage = ev => resolve(ev.data); port1.postMessage(o); }); } (async function () { const obj = { a: 1, b: { c: "foo" } }; const cloned = await deepClone(obj); console.log(cloned); })(); для ноды не будет работать, но там это и не нужно особо, хватает встроенных утилит

Andrew
19.10.2018
18:34:34
Можно руками быстро сделать

Viktor
19.10.2018
18:35:30
На самом деле, мне в JS вообще глубокое копирование почти не пригождалось

Andrew
19.10.2018
18:35:44
Viktor
19.10.2018
18:35:56
Object.assign в 99.9% решает все проблемы

Andrew
19.10.2018
18:36:05
))

Dima
19.10.2018
18:38:06
В обоих направлениях)

Viktor
19.10.2018
18:38:07
или какая-то совсем специфическая задача

а)

Max
19.10.2018
18:39:23
Забудьте уже про lodash, ramda и прочие абстракции накладывающие нехилый оверхед и добавляющие килобайты кода

Google
Max
19.10.2018
18:41:02
А что заканчивать? Вот смотри: https://gist.github.com/MaxGraey/e7486833ae3a7abe072ac35afce8a240

Dima
19.10.2018
18:41:08
с JS недавно, или я ошибаюсь?)
Да пару месяцев, на ноде пишу

Фронтендер отказался php устанавливать, а там сложная дичь на вуе

Viktor
19.10.2018
18:43:13
А что заканчивать? Вот смотри: https://gist.github.com/MaxGraey/e7486833ae3a7abe072ac35afce8a240
я все прочитал, логика ясна, но вот только не все так просто

я пользовался и пользуюсь всем из этого, больше всего rxjs

Max
19.10.2018
18:43:42
Viktor
19.10.2018
18:43:52
нет, я везде

?? Denis
19.10.2018
18:44:47
Max
19.10.2018
18:46:07
Viktor
19.10.2018
18:49:43
Забудьте уже про lodash, ramda и прочие абстракции накладывающие нехилый оверхед и добавляющие килобайты кода
ты сказал "забудьте", и только потом добавил "ты из frontend". В абстракциях нет ничего плохого, и уж точно не в библиотеках - это абсурд

Ну так поэтому это гист.
что касается конкретно compose через reducer - очевидно, что он будет работать быстро

потому что ramda ужасно тяжелая из-за автокаррирования повсюду (у нее очень много внутренних оберток-абстракций в самих ее исходниках)

?? Denis
19.10.2018
18:51:03
ну не используй Ramdу

используй более другие средства

Viktor
19.10.2018
18:51:21
в дополнение к этому любой pure-javascript подход будет добавлять оверхед

теперь, что касается массива с семью или сколько там нулей

нигде на бэкенде в жизни я не обрабатывал таких массивов данных

?? Denis
19.10.2018
18:52:12
purejs будет чаще всего жырнее по loc и менее читабелен

Viktor
19.10.2018
18:52:45
node.js бэкенд - это "скоросшиватель" небольших по своей сути ответов от БД и других сервисов

поэтому мне не кажется, что та же ramda очень больно ударит по среднему бэкенд-сервису

Google
Viktor
19.10.2018
18:56:02
максимум, что с чем мне придется работать (и то вряд-ли) в большинстве случаев - это сотня записей из БД, которые я покажу на очередном отрезке пагинации

где нибудь на клиенте

поэтому для узких мест, если они будут, я применю pure-lambda-подход, в остальных случаях, я не напишу что-то более производительное лодаша, если дело зайдет дальше compose или каррирования

Max
19.10.2018
18:57:58
нигде на бэкенде в жизни я не обрабатывал таких массивов данных
А при чем здесь это? С маленькими массивами будет все тоже самое, просто тайминги будут нулевые у всех так как conole.timeEnd выводит только три знака после запятрой

?? Denis
19.10.2018
18:58:35
никуда ramda не ударит. в живой среде никто не будет 10 млн итераций гонять с помощью ramda

?? Denis
19.10.2018
18:58:53
десятки, сотни, единицы тысяч записей в худшем случае из БД

Admin
ERROR: S client not available

?? Denis
19.10.2018
18:59:14
если ты дергаешь миллионы записей из БД для обработки рамдой - иди писать в 1С, там таких любят

Viktor
19.10.2018
18:59:17
в чем этот gist меня должен убедить? не использовать вышеупомянутые абстракции в принципе?

Max
19.10.2018
18:59:56
То что ты не сталкиваешься с большими данными которые нужно быстро обрабатывать еще не значит, что никто не сталкивается. Не суди всех по себе

?? Denis
19.10.2018
19:01:05
я как раз сталкиваюсь, только не на js :)

Viktor
19.10.2018
19:01:29
мне это как-то все кажется притянутым за уши, если честно :) мне в принципе на бэкенде все вышеупомянутое не часто требовалось compose/pipe я итак руками пишу всегда и кидаю в папку utils

в остальном, я не знаю, что мне ответить

если мне нужно будет выполнить тройное сальто, я лучше подключу salto.js

?? Denis
19.10.2018
19:02:25
все эти штуки типа триангуляции и mapboxjs это всё очень очень специфичные штуки

вживой природе овер 90% программеров этого не трогает

Google
?? Denis
19.10.2018
19:03:12
и рамда и lodash будет для них прекрасным инструментом

?? Denis
19.10.2018
19:03:42
а когда они дойдут до бигдаты - они сами поймут каким способом и что сделать и что рамда тут лишний

Viktor
19.10.2018
19:03:43
если уж мы рассуждаем о сферических проблемах в вакууме, я считаю, что удобство разработки не последний критерий

всегда будут абстракции - это факт

утилиты, библиотеки, хелперы - все это абстракции, без которых никак

Max
19.10.2018
19:04:07


Viktor
19.10.2018
19:04:41
среди них всегда есть альтернативы для выбора

Max
19.10.2018
19:05:09
Что там про сальто говорили?) Если для таких простых вещей нужно тянуть внешние зависимости то пожалуйста, в npm подобного добра завались

?? Denis
19.10.2018
19:05:37
и тот же lodash и рамда прекрасные инструменты для отлаживания алгоритмов и возможно потом и не надо будет от них избавлятся потому что выясница что тормоза не из-за них

Max
19.10.2018
19:06:57
утилиты, библиотеки, хелперы - все это абстракции, без которых никак
Так я же не против хелперов) Я против стандартных хелперов которые к тому же являются обвертками уже втроенных средств и собраны в огроменные либы

Viktor
19.10.2018
19:09:21
ты все равно в итоге напишешь велосипед

тот же lodash.curry немного толще твоего curry будет

Max
19.10.2018
19:10:30
ты все равно в итоге напишешь велосипед
А зачем пользоваться чьим то велосипедом (или точнее трактором, танком и т д) если тебе нужен скейт?)

Viktor
19.10.2018
19:10:43
вот это уже более конкретный вопрос

согласен тут на 100%

вот пример

Lyrran
19.10.2018
19:11:09
есть желающие получить кучу вопросов от начинающего студента, возможно на постоянной основе?)

Viktor
19.10.2018
19:11:29
мне нужен equalityCheck для потока данных в rxjs, я гляжу в lodash, там есть метод isEqual

Страница 2218 из 2237