honey
и видимо оно "запушится в конец"
Александр
Александр
honey
а куда
honey
щас минуту...
Hide
Hide
ясно ))
Hide
ничоси
Александр
а теперь typeof arr
Александр
))
Hide
а для чего это? ))
honey
неа))
опа. да. его нет в массиве... Оно где? оно же достается у массива по этому ключу
Александр
arr._proto_ так же проверить можно))
Hide
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
Hide
Александр
опа. да. его нет в массиве... Оно где? оно же достается у массива по этому ключу
В JS все является объектом.
Просто у каждого объекта разный прототип. Кто-то создается от класса Object, кто-то от класса Array и тп)
В зависимости от кого наследуюется объект, он получает все те же функции и свойства.
Но т.к. в JS наследование прототипное, то мы можем динамически менять прототип объекта, а соответственно и его свойства))
А тк все является объектов, то практически всему можно записать новый атрибут через blabla['новый атрибут']
Hide
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
Несколько часов курса до классов
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)
🏴☠️
Александр
А так да)
🏴☠️
Александр
мне тут задачку тестовую на тимлида прислали)
Нужно на питоне за линейное время собрать дерево))
https://docs.google.com/document/d/1KLKswR95oVZu-CRYPN79zXGGXzsp5SqTteX9y2daNKU/edit
Александр
В целом, что на питоне что на js одинаково решается))
Hide
Только на питоне синтаксис по другому называется функция def итд
Anton Soldatov
Anton Soldatov
Если ты умеешь в графы то там решать нечего, а если не умеешь, то адекватно ее и не решишь на ход ноги
Александр
А так это задачка для джуна)
Anton Soldatov
/если решит не возьмём/
Александр
:DDDD
Edgar
Edgar
Hide
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
honey
Мяу!
Я и раньше слышала, что в джс всё является объектами
Но эта фраза была пространственной
А ты объяснил Почему - про то что изначально все прописывается как классы, которые имеют свойства / методы, а раз так то это уже объекты, и что когда мы создаём через { } и [ ] , то просто даём джс понять объект КАКОГО КЛАССА МЫ ХОТИМ использовать?
И в этих классах также.прописано что если они созданы через { } - то при typeof отдавать object, а если класс (который объект) создан как [ ], тогда.ролучается при typeof должен отдать array?
И простые типы данных - тоже получается объекты? (ノ゚0゚)ノ~
Раз у Number есть методы... Значит видимо это тоже класс, которому прописаны методы / свойства
И String туда же, тоже есть методы
А symbol? Тоже объект? Не помню есть ли у него что-то, какие-то методы
honey
@rulzone тебе говорю !
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
Уаа, вообще непонятно что за функциональный фор или почему декларативный
Пробел! Надо посмотреть!!!
honey
forEach - это типа функциональный фор)))
honey
А так да)
honey
Декларативный)
honey
Ну ФП по сути есть декларативное))
Александр
Александр
Александр
honey