Анатолий
Больше говнокода.
Аргументируй
Андрей
Форыч забрать оттуда и пускай дальше будет не нужно :)
По бошке надо надавать людям, которые итерируют объекты.
Андрей
И вообще используют объекты не как объекты, а как key-value хранилище.
Андрей
Object.entries 😋
Во всех управляемых языках есть рефлексия. К Object.* нужно относиться именно так. Ошибка дизайна js в том, что доступ к рефлексии очень простой из-за чего люди пишут такое говно...
Анатолий
ошибка JS в прототипах вместо вменяемых классов
Прошу вас, граждане, давайте в js чате ругать хотя бы пхп ))
Андрей
Понял, ты прав, разработчики стандарта не правы :)
Разработчики стандарта всеми силами пытаются решить проблемы с косяками в детстве.
Анатолий
Андрей
Андрей
Ещё хуже простоты неединообразие.
Deleted
Зачем символы придумали?
Deleted
const obj = { a: 'b', c: 'd', [Symbol.iterator]: function * () { for (const kv of Object.entries(this)) { yield kv } } } for (const [key, val] of obj) { console.log('key=' + key) console.log('val=' + val) }
Deleted
> "key=a" > "val=b" > "key=c" > "val=d"
Viktor
может где то не сходится у нас, но у меня сейчас так
насколько я знаю, div1 никогда не сможет находиться между вторым и четвертым силами css)
Sergei
насколько я знаю, div1 никогда не сможет находиться между вторым и четвертым силами css)
Да вроде получилось, не факт, что правильно, но чисто технически это работает без изменения dom
Deleted
Итерируемый на уровне языка != итерируемый на уровне памяти.
Что значит на уровне языка? Какая разница между тем когда for of ищет Symbol.iterator в массиве и когда ищет Symbol.iterator в объекте? Или ты имеешь ввиду что в массиве это by design заложено?
Анатолий
Уже начали. Object.keys и т.д.
Но никак не закончат. Object.entries в черновике свежего стандарта, это немного не похоже на решение какой-то выдуманной тобой проблемы
Андрей
Что значит на уровне языка? Какая разница между тем когда for of ищет Symbol.iterator в массиве и когда ищет Symbol.iterator в объекте? Или ты имеешь ввиду что в массиве это by design заложено?
В том что у тебя в итераторе создаётся новый объект, который содержит все пары. А в случае Мапы такого объекта не создаётся.
Sergei
ну я бы по-другому и не сделал)
Да вот хз, может варианты еще какие есть тип тут сейчас неточность, есть, элемент с любым индексом больше 0 будет выше дива 2
Анатолий
От этого for (const [k, v] of Object.entries({a:'b', c: 'd'})) { console.log('key='+k) console.log('val='+v) } до этого foreach (k, v) in {a:'b', c: 'd'} { console.log('key='+k) console.log('val='+v) }
Sergei
ну я бы по-другому и не сделал)
Спасибо за помощь ) сейчас преподу отправлю, посмотрим, что ответит
Anonymous
Вот тот же твой пример обсахарить - и получился бы мой :)
Вот тебе сахарок: function* _(obj) { for (const key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of _({ a: "A", b: "B"})) { console.log(`${key}: ${value}`); }
Анатолий
Вот тебе сахарок: function* _(obj) { for (const key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of _({ a: "A", b: "B"})) { console.log(`${key}: ${value}`); }
Но всё равно это промежуточная функция. Гораздо эффективней переделать Object.entries, чтобы он итерировал
Анатолий
Потому что массив из одного ключа и одного значения это ужасно некрасиво
Анатолий
Если уж так - то лучше ключ и значение отдельно
Андрей
Т.е. вместо 1 метода ты предлагаешь сделать 3? map, filter и reduce?
Anonymous
Deleted
От этого for (const [k, v] of Object.entries({a:'b', c: 'd'})) { console.log('key='+k) console.log('val='+v) } до этого foreach (k, v) in {a:'b', c: 'd'} { console.log('key='+k) console.log('val='+v) }
Если зайти из далека JS хорош тем что коммюнити очень открыто к новым предложениям Если ты сможешь обосновать нахрен это нужно в следующей версии стандартна, распишешь синтаксис и будешь мейнтейнить обсуждение этой фичи - то твою идею примут
Анатолий
Одно и тоже. Что то Object.entries возвращает генератор, что этот сахарок
Разница только в нативности :) Сахарить свой код не дожидаясь стандартов - это старая жкверевская привычка, и всё же она старая :)
Anonymous
Разница только в нативности :) Сахарить свой код не дожидаясь стандартов - это старая жкверевская привычка, и всё же она старая :)
Я вру! Object.entries возвращает массив. Так что мой сахарок даже попроизводительнее будет, так как он ленивый
Анатолий
Если зайти из далека JS хорош тем что коммюнити очень открыто к новым предложениям Если ты сможешь обосновать нахрен это нужно в следующей версии стандартна, распишешь синтаксис и будешь мейнтейнить обсуждение этой фичи - то твою идею примут
Нет, я прекрасно проживу без этого. Меня просто удивило то, из-за чего я и пондял эту тему - что мы тут сахарим черновые стандарты следующих лет (!!!), а в сраном пхп это с нулевых, если не раньше
Anonymous
Ленивость != скорость во многих кейсах.
Если будет early return то очень даже
Андрей
V8 умеет перемалывать через map, filter и т.д. очень производительно.
Deleted
Я вру! Object.entries возвращает массив. Так что мой сахарок даже попроизводительнее будет, так как он ленивый
Object.entries может быть гораздо производительней твоих отдельных вызовов
Андрей
сколько лет вы программируете?
Зависит от того, что называть программированием.
Анатолий
ну JS вырос из скриптов анимации в браузере, а php задумывался как ЯП
Что не мешает разработчикам стандартов делать гигантские шаги в отказе от старья :) А нам мечтать о всякой переслащённо фигне :) Я вот линк хочу, но многие не хотят
Анатолий
Что тебе из линка надо?
То же, что и от вышеупомянутого пхпшного форыча
Анатолий
Запись и красота кода
Анатолий
var top = from await getItems() select name where id > 5 order by updatedDate desc group by groupId having groupId > 10;
Андрей
omg
Андрей
То самое говно, которое дотнетчики избегают сейчас.
Анатолий
Видимо, ты не в курсе о цепочной записи
Анатолий
Проблема в том, что она длиннее, мусорнее и недекларативнее
Анатолий
Хотя в каком-то виде реализуема и в жс нативно
Андрей
В курсе. В js уже есть эта цепочная запись.
Андрей
А вот ту ебанину, которую ты написал выше не нужно.
Deleted
var top = from await getItems() select name where id > 5 order by updatedDate desc group by groupId having groupId > 10;
с первого дня релиза линка избегал SQL-like записи цепочка гораздо понятнее и легче контроллируется
Андрей
Так что тебе надо из линка, чего нет в js?
Анатолий
скобки и аргументы хотя бы
Deleted
в новых стандартах JS будет пайплайнинг что гораздо лучше чем линк
Анатолий
Впрочем, если это надо переиспользовать, то конечно лучше цепочная, потому что оборачивать это в чейн будет гораздо ужаснее
Анатолий
хочу пайплайнинг в дотнет
Андрей
хочу пайплайнинг в дотнет
Он есть уже фиг знает сколько времени.
Андрей
F# называется.
Анатолий
Уточню: в C#.NET
Андрей
В C# уже и так говна навалом. Ещё и пайплайн тащить.