Size: a a a

JavaScript.Ninja

2021 February 04

Ж

Жаргал in JavaScript.Ninja
Arthur Irgashev
так причём здесь. речь о том, что если сервер присылает рандомные данные, то тебе и instanceof не поможет. почему ? Потому что при инициализации класса ты можешь не сделать всех нужных проверок и во внутренний стейт проскочит лабуда

номинально тип будет инстансом чего-либо, а фактически - будет полная ерунда и вообще весь апп может или закрашиться, или дать кучу багов
Вы же знаете, что язык применяется оооооооочень широко?
источник

AI

Arthur Irgashev in JavaScript.Ninja
Sergei
Коллеги, подскажите, есть ли более быстрый способ получить массивоподобный объект уникальных значение свойств объектов (age), из массива объектов (users), у которых это свойство (age) то ли есть, то ли нет, то ли null
let ages = new Set(Array.from(this.users, (u) => u.age));
ages.delete(null);
ages.delete(undefined);
можно ещё сделать вот так (но я хз, насколько генераторы будут быстрее или медленнее обычного for/foreach)

function* lazyMap(items, map) {
   for (const i of items) {
     yield map(i);
   }
 }

new Set(lazyMap([1, 2, 3], (item) => item * 2))
источник

AI

Arthur Irgashev in JavaScript.Ninja
Жаргал
Вы же знаете, что язык применяется оооооооочень широко?
ну, и ? Как это противоречит ?)
источник

Ж

Жаргал in JavaScript.Ninja
Arthur Irgashev
ну, и ? Как это противоречит ?)
В магазине продаются прокладки.
Вы же не предъявляете магазину, что он продает прокладки, которые мужчинам обычно не нужны.
Вы просто покупаете то, что вам надо и идете дальше.

В магазине JavaScript продаются классы.
Вам они не нужны. Окей, это нормально.
Берите то, что надо. Следующий на кассу с удовольствием нагребе классов.
источник

W

Wjchßlv in JavaScript.Ninja
Жаргал
Без классов никак, ибо если их не будет, у определенного процента сгорит жопа от необходимости ручками делать то, что классы дают почти бесплатно.
++
источник

AI

Arthur Irgashev in JavaScript.Ninja
Жаргал
В магазине продаются прокладки.
Вы же не предъявляете магазину, что он продает прокладки, которые мужчинам обычно не нужны.
Вы просто покупаете то, что вам надо и идете дальше.

В магазине JavaScript продаются классы.
Вам они не нужны. Окей, это нормально.
Берите то, что надо. Следующий на кассу с удовольствием нагребе классов.
я не призываю отказываться, я говорю, что всё элементарно решается без классов и проще
источник

AI

Arthur Irgashev in JavaScript.Ninja
но, лично у нас в команде был в своё время введён мораторий на классы и любое наследование :)

было даже правило в стайлгайдах: composition over inheritance


и никто ни разу об этом не пожалел
источник

AI

Arthur Irgashev in JavaScript.Ninja
хотя в первое время кое-кто возмущался, типа, ну классами жи лучше (на вопрос почему - "ну это жи классы"). а потом и они изменили свою точку зрения
источник

Ж

Жаргал in JavaScript.Ninja
Arthur Irgashev
я не призываю отказываться, я говорю, что всё элементарно решается без классов и проще
Не все, а те задачи, вероятно, которые решаете вы.
источник

S

Sergei in JavaScript.Ninja
Arthur Irgashev
ну у тебя две итерации есть (фактически, не 2 N, а n + m)

первая - Array.from()
вторая - new Set(items)
Ну да, но так и в цикле идет проверка ифом каждого элемента (это n), а потом добавление (m). Причем на добавление функция вызывается
источник

AI

Arthur Irgashev in JavaScript.Ninja
Жаргал
Не все, а те задачи, вероятно, которые решаете вы.
Абсолютно все
источник

AI

Arthur Irgashev in JavaScript.Ninja
Sergei
Ну да, но так и в цикле идет проверка ифом каждого элемента (это n), а потом добавление (m). Причем на добавление функция вызывается
Не понял тебя сейчас )
источник

AI

Arthur Irgashev in JavaScript.Ninja
ты об этом ?

const set = new Set();
items.forEach(() => {
 if(item.prop) set.add()
})
источник

S

Sergei in JavaScript.Ninja
Arthur Irgashev
можно ещё сделать вот так (но я хз, насколько генераторы будут быстрее или медленнее обычного for/foreach)

function* lazyMap(items, map) {
   for (const i of items) {
     yield map(i);
   }
 }

new Set(lazyMap([1, 2, 3], (item) => item * 2))
Ух.. тут надо подумать, я итераторы только через думанье пока воспринимаю.. Спасибо
источник

S

Sergei in JavaScript.Ninja
Arthur Irgashev
ты об этом ?

const set = new Set();
items.forEach(() => {
 if(item.prop) set.add()
})
Да
источник

AI

Arthur Irgashev in JavaScript.Ninja
тут нет m
источник

S

Sergei in JavaScript.Ninja
set.add
источник

AI

Arthur Irgashev in JavaScript.Ninja
тут добавляется всё в рамках одной итерации. всё что внутри - принято считать константой
источник

Ж

Жаргал in JavaScript.Ninja
Arthur Irgashev
Абсолютно все
Поговаривают, что категоричность — признак незрелости
источник

AI

Arthur Irgashev in JavaScript.Ninja
Sergei
set.add
это O(1), константа
источник