honey
вот это что за фича? )) arr['test']='test msg'
он по ключу test кладёт значение 'test msg' как я понимаю
honey
и видимо оно "запушится в конец"
honey
а куда
honey
щас минуту...
Hide
Hide
ясно ))
Hide
ничоси
Александр
а теперь typeof arr
Александр
))
Hide
а для чего это? ))
honey
неа))
опа. да. его нет в массиве... Оно где? оно же достается у массива по этому ключу
Александр
arr._proto_ так же проверить можно))
Hide
arr._proto_ так же проверить можно))
уу я до прототипов не дошел еще )))
Hide
плохо запомнил когда то скоро дойду освежу память ))
Александр
а можно вот так) let arr = {0:'t',1:'e',2:'s',3:'t', length:4}; arr.__proto__=Array.prototype; console.log(arr.pop()); console.log(arr.pop()); console.log(arr.pop()); console.log(arr.pop());
Александр
Или вот так: let arr = Array.from({length:100},(el, index)=>index) console.log(arr.length); console.log(arr)
🏴‍☠️
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
Александр
опа. да. его нет в массиве... Оно где? оно же достается у массива по этому ключу
В JS все является объектом. Просто у каждого объекта разный прототип. Кто-то создается от класса Object, кто-то от класса Array и тп) В зависимости от кого наследуюется объект, он получает все те же функции и свойства. Но т.к. в JS наследование прототипное, то мы можем динамически менять прототип объекта, а соответственно и его свойства)) А тк все является объектов, то практически всему можно записать новый атрибут через blabla['новый атрибут']
Александр
ммм ) Error.prototype.message Error message.
ну, правильно) У прототипа есть атрибут msg, который заполняется при создании объекта) В итоге у тебя у объекта типа Error появляется атрибут message)
Hide
а там чел не объяснил откуда это
Hide
вообще да, многие курсы от замыливания глаз не идеальны ) объясняют одну тему а там нюансы всякие про которые забывают, ведь им оно понятно а нам то нет )
Александр
class Student{ constructor(name){this.name=name}} let p1 = new Student('pasha'); let p2 = p1.constructor('sasha'); let p3 = Object.create(Object.getOwnPrototype(p2), Object.getOwnPropertyDescriptors(p2));
Александр
или по старинке))) function Human(name, surname, sex) { this.name = name; this.surname = surname; this.sex = sex; } let anna = new Human('Anna', 'Ivanova', 'female'); Human.prototype.getFullName = function () { return ${this.name} ${this.surname} }; console.log(anna.getFullName());
Александр
Ну ладно) Далеко до этого еще)
Александр
Ну и уберем у цикла for скобочки фигурные)) function multiplyNums(num1, num2) { return num1 * num2 } let array = [1, 3, 5] for (let i = 0; i < array.length; array[i] = multiplyNums(array[i], i), i++ ); console.log(array);
Hide
Несколько часов курса до классов
Hide
Сегодня хватит мозг устал
Александр
ну и деструктуризацию в форе тоже никто не отменял)) let list = [ {id:0,length:2}, {id:1,length:8}, {id:2,length:3}, ] for (const {id,length} of list) console.log(id,': ',length)
Александр
.forEach в данном случае более уместный
forEach - это типа функциональный фор)))
Александр
А так да)
Александр
Декларативный)
Ну ФП по сути есть декларативное))
Александр
мне тут задачку тестовую на тимлида прислали) Нужно на питоне за линейное время собрать дерево)) https://docs.google.com/document/d/1KLKswR95oVZu-CRYPN79zXGGXzsp5SqTteX9y2daNKU/edit
Александр
В целом, что на питоне что на js одинаково решается))
Hide
Только на питоне синтаксис по другому называется функция def итд
Anton Soldatov
Если ты умеешь в графы то там решать нечего, а если не умеешь, то адекватно ее и не решишь на ход ноги
Александр
А почему они решили, что это задача на Тимлида
ктоб знал) Я специально спросил, как они тимлида видят, как менеджера или в первую очередь как разработчика, ответили, что как менеджера)
Александр
А так это задачка для джуна)
Anton Soldatov
/если решит не возьмём/
Александр
:DDDD
Edgar
ну поп извлекает с конца
Господи, ужасный поп
Edgar
Edgar
Попу как священнослужителю не стоит заниматься такими вещами
Hide
Это не поп а инквизитор! )
🏴‍☠️
const source = [ [null, 'a'], [null, 'b'], [null, 'c'], ['a', 'a1'], ['a', 'a2'], ['a2', 'a21'], ['a2', 'a22'], ['b', 'b1'], ['b1', 'b11'], ['b11', 'b111'], ['b', 'b2'], ['c', 'c1'], ] const expected = { 'a': { 'a1': {}, 'a2': { 'a21': {}, 'a22': {} } }, 'b': { 'b1': { 'b11': { 'b111': {} } }, 'b2': {} }, 'c': { 'c1': {} }, } const makeTree = sourceData => { const result = {} for (let i = 0; i < sourceData.length - 1; i += 1) { const [key, value] = sourceData[i] if (key === null) { result[value] = {} sourceData.splice(i, 1) i -= 1 } } while (sourceData.length) { let [key, value] = sourceData.shift() let nestedPath = null if (result[key]) { result[key][value] = {} nestedPath = result[key][value] } const nested = sourceData.filter(item => item[0] === value) sourceData = sourceData.filter(item => !nested.includes(item)) if (nested) { nested.forEach(item => { let [key, value] = item nestedPath[value] = {} nestedPath = nestedPath[value] }) } } return result } console.log( JSON.stringify(makeTree(source), null, 2) )
Александр
🏴‍☠️
У меня есть книжка Графовые алгоритмы Рафгардена, еще не дошел до нее)
Anton Soldatov
Я бы сначала прошёлся по левым элементам уточнив структуру, а потом если заглублятся сразу по двум ветвям через туду(не рекурсией) можно в остальные два не ходить
Anton Soldatov
Вроде бы
Anton Soldatov
Хз за линейное, но экономия приличная
honey
Мяу! Я и раньше слышала, что в джс всё является объектами Но эта фраза была пространственной А ты объяснил Почему - про то что изначально все прописывается как классы, которые имеют свойства / методы, а раз так то это уже объекты, и что когда мы создаём через { } и [ ] , то просто даём джс понять объект КАКОГО КЛАССА МЫ ХОТИМ использовать? И в этих классах также.прописано что если они созданы через { } - то при typeof отдавать object, а если класс (который объект) создан как [ ], тогда.ролучается при typeof должен отдать array? И простые типы данных - тоже получается объекты? (ノ゚0゚)ノ~ Раз у Number есть методы... Значит видимо это тоже класс, которому прописаны методы / свойства И String туда же, тоже есть методы А symbol? Тоже объект? Не помню есть ли у него что-то, какие-то методы
honey
@rulzone тебе говорю !
honey
ага дошло теперь )
Хаха) через твои вопросы тут лежу в 2:48 узнаю приятности!))
honey
вообще да, многие курсы от замыливания глаз не идеальны ) объясняют одну тему а там нюансы всякие про которые забывают, ведь им оно понятно а нам то нет )
Очень сложно дать сразу с нюансами все Получится много и долго А если ещё с примерами то прям очень длинно Но в общем и целом идея мне тоже нравится, про то, чтобы детали пояснялись
honey
Александр
Мяу! Я и раньше слышала, что в джс всё является объектами Но эта фраза была пространственной А ты объяснил Почему - про то что изначально все прописывается как классы, которые имеют свойства / методы, а раз так то это уже объекты, и что когда мы создаём через { } и [ ] , то просто даём джс понять объект КАКОГО КЛАССА МЫ ХОТИМ использовать? И в этих классах также.прописано что если они созданы через { } - то при typeof отдавать object, а если класс (который объект) создан как [ ], тогда.ролучается при typeof должен отдать array? И простые типы данных - тоже получается объекты? (ノ゚0゚)ノ~ Раз у Number есть методы... Значит видимо это тоже класс, которому прописаны методы / свойства И String туда же, тоже есть методы А symbol? Тоже объект? Не помню есть ли у него что-то, какие-то методы
ну тип того) Можешь в браузере прям проверить) let i = 0 ; typeof i; i.__proto__ и посмотреть что там есть)
Александр
Единственно есть разница let i = new Number(12); typeof i будет object
Александр
Деструктуризация в форе? Так делают?
да как только не делают) Еще можно вложенную деструктуризацию делать)
honey
Уаа, вообще непонятно что за функциональный фор или почему декларативный Пробел! Надо посмотреть!!!
honey
forEach - это типа функциональный фор)))
honey
А так да)
honey
Декларативный)
honey
Ну ФП по сути есть декларативное))
Александр
honey
https://tproger.ru/translations/imperative-declarative-programming-concepts/
Меня попросили шпать идти Утром посмотрю! Очень интересно)