|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Помогите нубу в JS. Использую Node.js Код: javascript 1. 2. 3. 4. 5.
Логично выдаёт false. Надо, чтобы выдавало true. На С++ я понимаю, что надо реализовать класс и переопределить у него оператор сравнения, чтобы сравнивал по значению свойств. Как это сделать на JavaScript ? Быстрое гугление не помогло. А читать с нуля учебник на тысячу страниц долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 21:09 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Можно попробовать спросить в профильной ветке Модератор: Тема перенесена из форума "Java". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 21:36 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал Логично выдаёт false. Надо, чтобы выдавало true. На С++ я понимаю, что надо реализовать класс и переопределить у него оператор сравнения, чтобы сравнивал по значению свойств. Как это сделать на JavaScript ? Я х/з что там за Set... Но для сравнения объектов есть несколько путей. Например самый простой Код: javascript 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 10:30 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал , вот нашел тебе статейку на тему "сравнения объектов"... https://codeguru.info/kak-sravnit-obekty-v-javascript/ Там есть разные варианты с примерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 10:40 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Я х/з что там за Set... Почитал про этот Set... https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Set Так ты хочешь как-то сам переделать этому Set сравнение с объектами? Тогда зачем такой Set нужен? Если я правильно понял, его и делали как раз таким чтобы он умел правильно сравнивать если у него такой элемент или нет. Может тебе просто в тот Set не так засовывать свои объекты? Или вовсе не засовывать, если "равные" не должны быть равными... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 11:03 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa krvsa Я х/з что там за Set... Почитал про этот Set... https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Set Так ты хочешь как-то сам переделать этому Set сравнение с объектами? Тогда зачем такой Set нужен? Если я правильно понял, его и делали как раз таким чтобы он умел правильно сравнивать если у него такой элемент или нет. Может тебе просто в тот Set не так засовывать свои объекты? Или вовсе не засовывать, если "равные" не должны быть равными... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 20:23 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал , обзывать ЯП не обязательно... Особенно если не умеешь с ним работать. Это тебя показывает слабым специалистом. Ты ведь вообще никакого ЯП не написал, а уже хаешь чужую работу. Даже в доке по Set() четко написано как он работает Код: javascript 1. 2. 3.
Т.е. тебе нужно просто понять что в JS это разные объекты. Т.е. сравнивать нужно что-то действительно одинаковое. Как сравнивать одинаковое - я тебе показал на примерах выше. И статейку для разъяснения тебе дал... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 21:02 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал Выяснить, присутствует объект с таким набором атрибутов в списке или нет. В других языках решается на раз. Или в этом недоязыке такое невозможно? Я х/з в каких ЯР "решается на раз" сравнение сложных элементов... Но если тебе нужно получить список ключей объекта в JS есть нативный метод Object.keys() https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/keys Но с ним так же нужно уметь работать. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 21:09 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Можно так. С помощью коллбэк функции. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: javascript 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 22:01 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал Выяснить, присутствует объект с таким набором атрибутов в списке или нет. В других языках решается на раз. Или в этом недоязыке такое невозможно? Может быть другие недоязыки просто оперируют недообъектами? Код: javascript 1. 2. 3. 4. 5. 6. 7.
Как в других языках на раз сравнить на равенство a1 и b1? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2021, 22:07 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал Логично выдаёт false. Надо, чтобы выдавало true. Посчитай хеш объекта, засунь его в сет. Ведущий профессионал Быстрое гугление не помогло. А читать с нуля учебник на тысячу страниц долго. Тоже мне профессионал. Попробуй головой подумать в следующий раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 05:15 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
alectr Можно так. С помощью коллбэк функции. Костыль. JSON.stringify - это очень медленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 05:16 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster alectr Можно так. С помощью коллбэк функции. Костыль. JSON.stringify - это очень медленно. Смысл был не стрингифай показать, а как один из вариантов экстенда оригинального Set. stringify никогда не использовал в реальных проектах как сравнение объектов. Он вдобавок не умеет сериализовать Map, Set и прочее. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 07:11 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster Костыль. JSON.stringify - это очень медленно. crutchmaster Посчитай хеш объекта, засунь его в сет. Хеш считать быстрее, чем JSON.stringify? Прежде чем решать задачу, надо поставить условия. С какими объектами надо иметь дело? В Js все что не примитивный тип, то объект. И массивы - объекты, и всякие Map, Set, RegExp - объекты, И даже функции тоже объекты. Нужно как то ограничить. Какие поля будут у сравниваемых объектов? Только примитивных типов? А методы допустимы? А надо ли учитывать прототипы? И т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 09:45 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
alectr как один из вариантов экстенда оригинального Set Не пойдёт такой вариант эктенда, тем более, если искать проходом c for..of и делать преобразование каждого элемента, бррр. Это убивает весь смысл set'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 09:55 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa Хеш считать быстрее, чем JSON.stringify? Точно быстрее, чем делать stringify указанным образом, доставая каждый элемент из сета и сравнивая. Даже тупо склеить значения в строку будет быстрее. Плюс stringify не нужно использовать для всяких служебных полей, ссылок, set'ов, map'ов, функций, цикличных ссыкол и прочего. В общем случае это работать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 09:59 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster Точно быстрее, чем делать stringify указанным образом, доставая каждый элемент из сета и сравнивая. Даже тупо склеить значения в строку будет быстрее. Плюс stringify не нужно использовать для всяких служебных полей, ссылок, set'ов, map'ов, функций, цикличных ссыкол и прочего. В общем случае это работать не будет. stringify - встроенная функция, написанная на ассемблере и оптимизированная. Она работает быстрее, чем то же самое написать на JS и потом выполнять этот байткод. Даже "тупо склеить значения в строку" будет медленнее. В JS нет встроенной функции вычисления хешей объектов. Только самому писать. Причем с учетом хешей для сетов, мепов и с учетом циклически ссылок. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:14 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ранее ребята давали ссылки на ресурсы, там можно было легко проверить "что быстрее"... Но, за не надобностью, я те ссылки утерял. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:28 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster Не пойдёт такой вариант эктенда Не пойдет для чего? crutchmaster тем более, если искать проходом c for..of А каким то другим проходом проверить уникальность объектов в рамках структуры данных Set (да и любой другой) будет быстрее? Здесь нужно знать что вообще пытается решить автор, возможно ему это и не нужно. , crutchmaster и делать преобразование каждого элемента, брррх Какое преобразование? Вы имеете ввиду всё тот же stringify? Если да, то вероятно вы не можете отделить мух от котлет в данном случае. Ну вызовите тогда так (зная свойство определяющее уникальность объекта) - set.add({a:1}, (l,r)=>l.id === r.id);. Коллбэк позволяет подпихнуть любую функцию для сравнения, подпихнете туда стрингифай, значит будет преобразование, не подпихнете, значит не будет. crutchmaster Это убивает весь смысл set'а. Из слов автора "На С++ я понимаю, что надо реализовать класс и переопределить у него оператор сравнения" Кажется что ему нужно именно изменить поведение класса set. Какую он решает задачу, хз, за что купил как говорится. Вполне вероятно ему Set в принципе не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:38 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa stringify - встроенная функция, написанная на ассемблере и оптимизированная. Она работает быстрее, чем то же самое написать на JS и потом выполнять этот байткод. Во-первых, не на ассемблере, а на плюсах. Во-вторых, на v8 есть jit компилятор, а не только байткод, В-третьих, никто не предлагает писать stringify на js. В-четвёртых, вот еще тебе прикол с stringify: Код: sql 1. 2. 3. 4.
Так что удачи с сетом на нём voraa Даже "тупо склеить значения в строку" будет медленнее. Что угодно будет быстрее только за счёт того, что не надо будет перебирать элементы сета и что-то с ними делать, каждый раз добавляя туда элемент. voraa В JS нет встроенной функции вычисления хешей объектов. На языках с ВМ есть пул иммутабельных строк, а там у каждой строки есть хэш. Если этого не хватает, да, двигать биты, впрочем, как делают везде. voraa Только самому писать. Как в жабке делают хеш произвольного класса? Да, сидят и сами пишут, представь себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 10:51 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
alectr Не пойдет для чего? Ни для чего, кроме лабы. alectr А каким то другим проходом проверить уникальность объектов в рамках структуры данных Set (да и любой другой) будет быстрее? Её не надо проверять. Вообще не надо перебирать сет. Если его перебирать, то он нафиг не нужен, проще сделать свой сет с каким-то там бинарным деревом для своих объектов на жс или разложить их по объектам, где каждый ключ будет значением из вносимого объекта в каком-то порядке. alectr Ну вызовите тогда так (зная свойство определяющее уникальность объекта) Да без разницы, что вызывать. Перебор и так не очень быстрый, особенно for..of. Проверь какой-нибудь задрипанный миллион элементов на вхождение в миллионный сет и получи до 1*10**14 вызовов твоей функции. alectr Кажется что ему нужно именно изменить поведение класса set Превращая его в массив и делая его обход при каждой вставке. Это не поведение set, он так себя не ведёт. А потом говорят, что js тормозит, да. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:01 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
alectr crutchmaster Не пойдёт такой вариант эктенда Не пойдет для чего? crutchmaster тем более, если искать проходом c for..of А каким то другим проходом проверить уникальность объектов в рамках структуры данных Set (да и любой другой) будет быстрее? Здесь нужно знать что вообще пытается решить автор, возможно ему это и не нужно. , crutchmaster и делать преобразование каждого элемента, брррх Какое преобразование? Вы имеете ввиду всё тот же stringify? Если да, то вероятно вы не можете отделить мух от котлет в данном случае. Ну вызовите тогда так (зная свойство определяющее уникальность объекта) - set.add({a:1}, (l,r)=>l.id === r.id);. Коллбэк позволяет подпихнуть любую функцию для сравнения, подпихнете туда стрингифай, значит будет преобразование, не подпихнете, значит не будет. crutchmaster Это убивает весь смысл set'а. Из слов автора "На С++ я понимаю, что надо реализовать класс и переопределить у него оператор сравнения" Кажется что ему нужно именно изменить поведение класса set. Какую он решает задачу, хз, за что купил как говорится. Вполне вероятно ему Set в принципе не нужен. В первом посте совершенно чётко изложена формулировка задачи. И даже на русском языке. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:01 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
В общем, я понял. С объектам Set в этом недоязыке работать не умеет. Только со строками и прочими примитивными типами. Надо просто вручную преобразовывать объект в строку перед обращением к Set: Код: javascript 1. 2. 3. 4. 5. 6. 7.
Ну, или иным способом считать хэш применительно к конкретной задаче (у меня в данных пробелов нет, потому объединение через пробел подходит). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:12 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал С объектам Set в этом недоязыке работать не умеет. С содержимым объектов, профи. Код: sql 1. 2. 3.
Впрочем, как другие недоязыки типа жабки или питона. Ведущий профессионал (у меня в данных пробелов нет, потому объединение через пробел подходит). Подходило бы, даже если бы они и были. Главное не обделайся с порядком. Ключи перебираются в том же порядке, каком были добавлены, так что надеяться на него не стоит. Ты же не знаешь, что с ним делали по дороге до тебя. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:17 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
-- ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:18 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
все шагают не в ногу, только ведущий профессионал в ногу.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:23 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Интересно... С каких ЯП приходят все эти грамотеи что JS, и много кто еще, обзываются ими как "недоязыки"? Или они программки пишут волшебной палочкой, которая может обеспечить мгновенную проверку на "совпадение" сложных элементов языка... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:28 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Интересно... С каких ЯП приходят все эти грамотеи что JS, и много кто еще, обзываются ими как "недоязыки"? После плюсов на все смотришь, как на дерьмо. Давно замечено, что сей язык раздувает чсв. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 11:44 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster, особенно для. веба - прям все на сях написано. надо просто научиться программировать..... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 12:34 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster После плюсов на все смотришь, как на дерьмо. Давно замечено, что сей язык раздувает чсв. Это, видать, так же зависит от самого человека... Довольно долгое время имел в "напарниках" по разработке спеца в этом (и не только) ЯП. Никакого "раздутия" не наблюдал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 12:42 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
вадя, Программист на фортране может писать на фортране на любом языке! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 12:43 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster вадя, Программист на фортране может писать на фортране на любом языке! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 12:47 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster Ведущий профессионал С объектам Set в этом недоязыке работать не умеет. С содержимым объектов, профи. Код: sql 1. 2. 3.
Впрочем, как другие недоязыки типа жабки или питона. Ведущий профессионал (у меня в данных пробелов нет, потому объединение через пробел подходит). Подходило бы, даже если бы они и были. Главное не обделайся с порядком. Ключи перебираются в том же порядке, каком были добавлены, так что надеяться на него не стоит. Ты же не знаешь, что с ним делали по дороге до тебя. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:13 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Интересно... С каких ЯП приходят все эти грамотеи что JS, и много кто еще, обзываются ими как "недоязыки"? Или они программки пишут волшебной палочкой, которая может обеспечить мгновенную проверку на "совпадение" сложных элементов языка... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:16 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster krvsa Интересно... С каких ЯП приходят все эти грамотеи что JS, и много кто еще, обзываются ими как "недоязыки"? После плюсов на все смотришь, как на дерьмо. Давно замечено, что сей язык раздувает чсв. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:17 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster, crutchmaster Во-первых, не на ассемблере, а на плюсах. Во-вторых, на v8 есть jit компилятор, а не только байткод, Немного устарелые сведения и недопонимание, как происходит оптимизация (на примере V8) Встроенные функции сейчас написаны на CSA (CodeStubAssembler) Это некий универсальный ассемблерный язык, позволяющий работать с памятью и объектами JS, который компилируется в ассемблер конкретной машины. От С++ для функций отказались. Обработка JS программ в V8 происходит следующим образом: Сначала происходит синтаксический разбор и строится AST (Абстрактное синтаксическое дерево) Затем интерпретатор Ignition выполняет его, генерует байткод для выполняемых операторов и исполняет его (конечно повторно байткод не генерится) Фактически для каждой функции байткод генерится только в момент ее первого вызова. Есть оптимизирующий компилятор TurboFan, который может преобразовать байткод в оптимизированный ассемблерный код. Но происходит это далеко не всегда. Сначала для каждой функции собирается статистика ее вызовов. Одно из требований что бы каждый раз функция вызывалась с одинаковыми типами параметров. (Кстати 1 и 1. - это разные типы. {a:1, b:2} и {b:3, a:4} - это разные типы, [1,2,3,4] и [1,2,3.,4] - тоже разные типы) И только после того, как соберется хорошая статистика (а это несколько тысяч вызовов данной функции) принимается решение оптимизировать ее TurboFan ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:26 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал krvsa Интересно... С каких ЯП приходят все эти грамотеи что JS, и много кто еще, обзываются ими как "недоязыки"? Или они программки пишут волшебной палочкой, которая может обеспечить мгновенную проверку на "совпадение" сложных элементов языка... Другие языки сначала долго и нудно компилятся. В других языках компилятор знает, какого типа переменные, что бы подобрать для операции функцию, если она переопределена. В JS в режиме интерпретации байткода придется для каждой операции выяснять нет ли функции, которая переопределяет эту операцию. И все это в режиме выполнения, а не компиляции. Потом такие умники будут выть, что браузер страшно тормозит, каждый клик обрабатывается по 10 сек. И работать в интернете ваще невозможно, а мобильники разряжаются после просмотра 10 страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:39 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал, ты как веган, стремишься всех убедить в своем мнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:43 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал в других языках программист может задать свой оператор сравнения. Я рад за тебя. Но только в JS это вообще не требовалось никогда. Потому этого и нет. Тут достаточно средств для решения проблем. Я уже писал в другой теме - не стоит тащить за уши приемы одного ЯП в другой. В другом полно своих приемов для решения задач. Вполне вероятно что ты вообще не правильный подход взял для решения проблемы на JS, пытаешься использовать приемы другого языка. P.S. Сравнение с веганом поддерживаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:53 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Ведущий профессионал в других языках программист может задать свой оператор сравнения. Я рад за тебя. Но только в JS это вообще не требовалось никогда. Потому этого и нет. Тут достаточно средств для решения проблем. Ну мне иногда хотелось бы иметь возможность переопределить + для сложения векторов или * и / для умножений делений вектора на число. Да и === для сравнения равенства точек (а == для равенства с некоторой погрешностью). Мечты... мечты... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:08 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa , для реализации "желания" не обязательно переделывать "стандартные символы операций", можно написать функцию или метод, который будет возвращать нужный результат. Т.е. не Код: javascript 1.
а Код: javascript 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:21 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa voraa , для реализации "желания" не обязательно переделывать "стандартные символы операций", можно написать функцию или метод, который будет возвращать нужный результат. Т.е не Код: javascript 1.
A Код: javascript 1.
Ну, что. Красиво. Наглядно, Понятно (Если со скобками не напортачил). От колбеков в свое время отказались еще и по причине их ненаглядности. Сложности разбираться что там кого за кем вызывает. Промисы проще и нагляднеею А async/await еще проще и нагляднее Ведь по эффективности и возможностям колбеки ничем не уступают. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:28 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa , не обязательно писать все в одну кучу. Ну и коронный вопрос - вам с шашечками или ехать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:34 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa, Конечно ехать. (Но иногда надежнее ехать с шашечками). Просто JS хорош. Но коего чего не хватает. Есть, так сказать, отдельные недостатки. Его улучшают, как могут. Но не кардинально. Просто синтаксический сахар, чаще всего. Подавляющее большинство синтаксических конструкций, которые появились за последние годы ничего кардинально нового не ввели. Начиная с class , кончая последними операторами, типа .? или ?? . Все это было возможно делать и другими средствами. Не так кратко и красиво, но возможно. Нового, чего раньше не было, и совсем уж проблематично реализовать - Symbol, Генераторы, Приватные поля. Пожалуй больше ничего и в голову не приходит. Ну согласитесь, что с перегрузкой операторов и защищенными полями JS стал бы гораздо лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 14:50 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa Ну согласитесь, что с перегрузкой операторов и защищенными полями JS стал бы гораздо лучше. Какие наши годы! Будет потребность - будут и добавки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 15:13 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Ведущий профессионал , вот нашел тебе статейку на тему "сравнения объектов"... https://codeguru.info/kak-sravnit-obekty-v-javascript/ Там есть разные варианты с примерами. по сабжу - либо назначать объектам уникальный id, либо использовать иммутабельность, либо таки да, придумать функцию сериализации в строку. непонятно, какова задача, какая судьба у объектов и что с ними может происходить. формулировка в стартовом посте лишена смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 19:30 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Имя пользователя1 "ромбы" или (особенно) циклы Покажи примеры этих элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 19:37 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa, У объектов могут быть методы. Как сравнивать одинаковы ли функции? Объекты имееют прототип. Одинаковы ли элементы, если они имеют разный прототип? Те примеры дадут, что Код: javascript 1. 2.
одинаковые объекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 20:47 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
ЖС в этом плане действительно отсталый язык. Где нет ни оверлоада функций нормального с типами, ни мульти диспатч, ни екстеншен методов, ни сложных структур данных, ни понимания хеш/еквалити и т.п. А то что ничего из этого не нужно. Это как зелен виноград. Это все нужные вещи. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 00:45 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
ЖС это идеи ЛИСП которые за несколько дней превратили во что то типа Java чтобы выглядело привычно и лучше продавалось. Каким то чудом все это довольно хорошо заработало. Затем Гугл и другие влили океаны бабла, и превратил это в достаточно хороший язык. Затем Микрософт добавил ТайпСкрипт и получилось вполне нормально. Но многие базовые, тривиальные и нужные вещи, просто невозможно добавить не разрушив уже сложившиеся жаваскрипт практики и совместимость. Поэтому даже накачанный до предела баблом и в принципе довольно неплохой язык жаваскрипт так и остается с рядом фундаментальных дефектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 00:49 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
А через много лет разработчики жаваскрипта придумывают глубокие идеи и принцыпы языка, "The JavaScript Way", чтобы обьяснить его странности и особенности :). Хотя основная концепция JS это "... я его слепила из того что было ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 00:53 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa Мечты... мечты... Беллард в quickjs сделал. Может лет через 5 и коммитет раздуплится. Можешь устроить там драму в обсуждениях, подтолкнуть его. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 06:54 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
private ЖС в этом плане действительно отсталый язык. Где нет ни оверлоада функций нормального с типами, ни мульти диспатч, ни екстеншен методов, ни сложных структур данных, ни понимания хеш/еквалити и т.п. Это динамический слаботипизированный язык, такой же, как, например, луа. Откуда там может взяться оверлоад функций, типы и пр., болезный? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 06:57 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
private рядом фундаментальных дефектов То, что рыба плавает, а не летает, видимо тоже фундаментальный дефект рыбы, лул. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 06:59 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Чето не понимаю, как можно сравнивать stringify для двух объектов, типа {a:1,b:2} и {b:2,a:1}. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 07:01 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa У объектов могут быть методы. Как сравнивать одинаковы ли функции? У меня не было надобности в таком сравнении. Т.ч. не у того спрашиваешь... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 08:01 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
авторУ меня не было надобности в таком сравнении. Т.ч. не у того спрашиваешь. у меня тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 09:11 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Имя пользователя1 "ромбы" или (особенно) циклы Покажи примеры этих элементов. Код: javascript 1. 2. 3. 4. 5. 6. 7.
ну и всякие комбинации того-сего. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 16:50 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Чего только не насмотришься... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 17:25 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa Чего только не насмотришься... Да я соавниваю, что надо сравнивать. Например, в цикле, или ещё как. И не парюсь. Это не часто нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 17:31 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
ShSerge , сейчас с этими юнит тестами валом всяких библиотек для сравнения тех же объектов... Подключай и используй. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 20:56 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Вот одна из таких http://underscorejs.org/#isEqual Или вот... https://jestjs.io/ru/docs/using-matchers ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 21:01 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa voraa У объектов могут быть методы. Как сравнивать одинаковы ли функции? У меня не было надобности в таком сравнении. Т.ч. не у того спрашиваешь... Когда применительно к JS говорят об объектах, то естественно приходит на ум произвольный объект, допустимый в JS. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 21:03 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa , все функции/методы, что по ссылкам я привел выше, сравнивают именно произвольные объекты... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 21:32 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa voraa , все функции/методы, что по ссылкам я привел выше, сравнивают именно произвольные объекты... undescore не работает с произвольными объектами. Все не проверял, но Код: javascript 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 22:47 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa undescore не работает с произвольными объектами. Напиши им в жлоб лист - пусть доделывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 23:00 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
krvsa voraa undescore не работает с произвольными объектами. Напиши им в жлоб лист - пусть доделывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 23:32 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Имя пользователя1 хрен они доделают - поля-симболы не итерируются (это типа такой сейф для данных: если на руках нет симбола, то никак не доберешься до поля). В смысле? Ну не итерируются через for-in. Но есть же Object.getOwnPropertySymbols Можно через него. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 23:40 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
ВСе правильно андерскор делает, весь смысл символов чтобы они были невидимыми, и соотв. не обнаруживались стандартными операциями. А вытащить символ таки можно ``` let s = Symbol() Object.getOwnPropertySymbols({a:1, b:2, [s]:3}) ``` ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 23:43 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Or Код: javascript 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2021, 23:58 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
private ВСе правильно андерскор делает, весь смысл символов чтобы они были невидимыми, и соотв. не обнаруживались стандартными операциями. А вытащить символ таки можно ``` let s = Symbol() Object.getOwnPropertySymbols({a:1, b:2, [s]:3}) ``` Речь идет о равенстве объектов. Логично предположить, что если объекты равны, то любые действия с этими объектами дадут одинаковый результат Код: javascript 1. 2. 3. 4. 5. 6. 7.
И что считать "стандартными" операциями? По мне любая функция входящая в реализацию движка вполне стандартна. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 00:02 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал ]В других языках я могу переопределить оператор сравнения. И объекты будут сравниваться так, как я хочу, а не так, как хочет язык. Серьезно? В С++ можно переопределить оператор сравнения, что бы сравнивать произвольные объекты? Ну хотя бы почти произвольные? Хоть черновик набросайте, как это сделать Или речь идет про какие то другие языки? Какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 01:32 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa В С++ можно переопределить оператор сравнения, что бы сравнивать произвольные объекты? Ну хотя бы почти произвольные? Да легко. Преобразуй в *void и сравнивай побайтно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 11:59 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster voraa В С++ можно переопределить оператор сравнения, что бы сравнивать произвольные объекты? Ну хотя бы почти произвольные? Да легко. Преобразуй в *void и сравнивай побайтно. Ну ты хитрый, умелый программер. Большой знаток. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
a == b? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 13:43 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Проблема то вроде пустяковая Есть какие то структуры struct A {...}; struct B {...}; struct C {....}; ..... Есть "объекты" A a1, a2; B b1, b2; C c1, c2; И должно быть проще пареной репы в таком могучем языке, с великой перегрузкой операторов, со всякими хешами... Написать метод сравнения a1 c b1? c1 c c2, c2 c a2... Короче любой объект с любым Или в недоязыке C++ такое невозможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 14:13 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
crutchmaster voraa В С++ можно переопределить оператор сравнения, что бы сравнивать произвольные объекты? Ну хотя бы почти произвольные? Да легко. Преобразуй в *void и сравнивай побайтно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 16:03 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa a == b? Добавляешь маркоснёй в каждую структуру стат. поле с названием типа и всё работает ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 07:59 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Имя пользователя1 объекты могут содержать указатели на другие объекты, этот вариант не прокатит Нужна просто более забористрая рекурсивная макросня, которая будет генерировать код для метода преобразования, который в свою очередь будет обходить ссылки. Ну или что у них там вместо макросни? Что-то было для всяких извратных compiletime вещей. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 08:04 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa Проблема то вроде пустяковая Есть какие то структуры struct A {...}; struct B {...}; struct C {....}; ..... Есть "объекты" A a1, a2; B b1, b2; C c1, c2; И должно быть проще пареной репы в таком могучем языке, с великой перегрузкой операторов, со всякими хешами... Написать метод сравнения a1 c b1? c1 c c2, c2 c a2... Короче любой объект с любым Или в недоязыке C++ такое невозможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 06:29 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
Ведущий профессионал ]В других языках я могу переопределить оператор сравнения. И объекты будут сравниваться так, как я хочу, а не так, как хочет язык. Вот я и хочу сравнивать произвольные объекты. Если разных типов, то не равны. А если одного типа, то сравнивать значения... А где? Ну там же, где кто то требует подобного от JS ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2021, 11:19 |
|
Сложные структуры в качестве ключа в set
|
|||
---|---|---|---|
#18+
voraa А если одного типа, то сравнивать значения Значения чего? Массивы объектов одного типа, объекты бывают вложенные. А еще есть функции, генераторы, регулярки, символы, промисы, etc. Как ты их будешь сравнивать? Отвечаешь на все эти вопросы, пишешь какой-нибудь очередной equalsDeep. Делов-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 05:28 |
|
|
start [/forum/topic.php?all=1&fid=22&tid=1443196]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
106ms |
get tp. blocked users: |
1ms |
others: | 245ms |
total: | 433ms |
0 / 0 |