@@user-or1hy4xz8u всё так, об этом сказано в видео, ведь функция это объект. В целом так себе урок, куча извращенских способов. По факту для простого копирования это или спрэд оператор или метод slice. Хотелось бы узнать способы для полного, глубокого клонирования.
Так, а рабочего варианта разве нет, кроме JSON? Обычным условием не получится, или рекурсией? Просто, кажется, что есть решение... upd: Извиняюсь, в конце услышал по рекурсию, НО, почему не показали этих решений? Одна часть видео есть, а вторая в небо.
var original=[6,[7,0],9]; var copy=clone(original); function clone(array){ var returnArray=[]; array.forEach(elem => { if (Array.isArray(elem)) returnArray.push(clone(elem)); else returnArray.push(elem); }) return returnArray; } console.log(original,copy); original[1].push(8); console.log(original,copy); // И ничего сложного с рекурсивным алгоритмом. все великолепно работает!
Надо было тему дальше раскрыть!!!! С рекурсией, там typeof a[ i ] на массив проверяешь и если true то применяешь туже функцию для этого же елемента. Правда рекурсия почти также ресурсоемкая как и с JSON
Не додумался бы использовать JSON для клонирования. Спасибо, новые знания на вооружение.
это хорошо.
@@itgid но там вроде проблема с JSON - если копируется вложенная функция, то тип теряется... как-то так...
@@user-or1hy4xz8u всё так, об этом сказано в видео, ведь функция это объект.
В целом так себе урок, куча извращенских способов. По факту для простого копирования это или спрэд оператор или метод slice.
Хотелось бы узнать способы для полного, глубокого клонирования.
Отличный формат, спасибо!
Спасибо!
Так, а рабочего варианта разве нет, кроме JSON? Обычным условием не получится, или рекурсией? Просто, кажется, что есть решение...
upd: Извиняюсь, в конце услышал по рекурсию, НО, почему не показали этих решений? Одна часть видео есть, а вторая в небо.
а рекурсию сами придумывайте, эхехе
Да цели не было показать рекурсию.
@@maximevtahov2360 а что ее придумывать?
var original=[6,[7,0],9];
var copy=clone(original);
function clone(array){
var returnArray=[];
array.forEach(elem => {
if (Array.isArray(elem)) returnArray.push(clone(elem));
else returnArray.push(elem);
})
return returnArray;
}
console.log(original,copy);
original[1].push(8);
console.log(original,copy);
// И ничего сложного с рекурсивным алгоритмом. все великолепно работает!
Vue жаловался на бесконечный луп апдейта, знал что объекты передаются по ссылке, но забыл что массивы, это то же объекты)) Спасибо за видео!
Отличное видео, спасибо!
Из-за этой проблемы не лучше было бы остатбся на lodash ?
Спасибо за инфу, весьма полезно.
structuredClone(); caniuse=90.26%
Александр когда будешь продвинутый JS и будет ли вообще?
Не знаю. Как только тема видео становится более менее серьезной, я получаю 30 просмотров за месяц. А затраты на подготовку и реализацию - огромные.
Надо было тему дальше раскрыть!!!! С рекурсией, там typeof a[ i ] на массив проверяешь и если true то применяешь туже функцию для этого же елемента. Правда рекурсия почти также ресурсоемкая как и с JSON
В программировании главное смекалка.
Отличное видео, его не хватало в js2.0. let b = a.reverse().slice(); a.reverse(); console.log(b); бодрил 🤔.
лайк за каждое видео
спасибо
arr.flat(Infinity) рекурсивно проходит по массиву и на выходе массив одного уровня вложенности, как вариант дабы самому не писать рекурсию.
это уже не относится к задаче клонирование массива.это уже клонирование элементов..немного разные вещи получаются
@@slovaripro Ну можно создать новый массив и в нём к этой конструкции spread применить [...arr.flat(Infinity)] как вариант если вложенность не нужна.
Тот случай когда комент полезнее самого видео! Спасибо тебе большое!
+
+