Size: a a a

2019 October 28

w

welone in JS
Ваня Реутенко
откуда функция g может знать кто-нибудь трогал переменную a или нет
спасибо, понял
источник

AM

Aleksandr Medovnik in JS
Коллеги, оцените самописную функцию глубогоко клонирования объекта:

let obj = {
 name: 'Pete',
 work: {
   developer: 5,
   manager: {
     it: 10,
     recruiting: 1
   }
 }
};
let clone = {};
function cloneObject(obj, clone) {
 for (let key in obj) {
   if (typeof(obj[key]) == "object") cloneObject(obj[key], {});
   clone[key] = obj[key];
 }
};  
cloneObject(obj, clone);
obj = null;  
console.log(clone.work.manager.it); // 10
источник
2019 October 29

ВР

Ваня Реутенко... in JS
Serafim
Спасибо, но я понял, что в промисах и в async/await я ничего не понял, хоть задачи Ильи Кантора и решал.
источник

𝓐

𝓐𝓷𝓸𝓷𝔂𝓶𝓸𝓾𝓼... in JS
хоть и не мне но спс) полезно
источник

ВР

Ваня Реутенко... in JS
источник

G

GhostMan in JS
источник

VL

Vladimir Luvolunov in JS
Aleksandr Medovnik
Коллеги, оцените самописную функцию глубогоко клонирования объекта:

let obj = {
 name: 'Pete',
 work: {
   developer: 5,
   manager: {
     it: 10,
     recruiting: 1
   }
 }
};
let clone = {};
function cloneObject(obj, clone) {
 for (let key in obj) {
   if (typeof(obj[key]) == "object") cloneObject(obj[key], {});
   clone[key] = obj[key];
 }
};  
cloneObject(obj, clone);
obj = null;  
console.log(clone.work.manager.it); // 10
Во-первых, в глаза бросается то, что функция нечистая, а во-вторых, не работает
источник

VL

Vladimir Luvolunov in JS
Меняю свойство в первом объекте, оно меняется во втором
источник

VL

Vladimir Luvolunov in JS
function createObject(obj){
  const newObj = {};
  for (let prop in obj){
     if(typeof obj[prop] === "object"){
       newObj[prop] = createObject(obj[prop])
     } else {
       newObj[prop] = obj[prop];
     }
  }
 
  return newObj;
}

let f = {
 a: {
    b: 6
 }
}

let c = createObject(f);

f.a.b = 20;

console.log(f);
console.log(c);
источник

S

Syntax Highlight Bot in JS
Vladimir Luvolunov
function createObject(obj){
  const newObj = {};
  for (let prop in obj){
     if(typeof obj[prop] === "object"){
       newObj[prop] = createObject(obj[prop])
     } else {
       newObj[prop] = obj[prop];
     }
  }
 
  return newObj;
}

let f = {
 a: {
    b: 6
 }
}

let c = createObject(f);

f.a.b = 20;

console.log(f);
console.log(c);
источник

VL

Vladimir Luvolunov in JS
А это уже рабочий вариант
источник

VL

Vladimir Luvolunov in JS
Но недостаток единственный - нет проверки на массивы, ведь массив также оставляет ссылку
источник

VL

Vladimir Luvolunov in JS
И моя функция тупо из массива делает объект)))
источник

VL

Vladimir Luvolunov in JS
function createObject(obj) {
 const newObj = {};
 for (let prop in obj) {
   if (typeof obj[prop] === "object") {
     newObj[prop] = Array.isArray(obj[prop])
       ? createArray(obj[prop])
       : createObject(obj[prop]);
   } else {
     newObj[prop] = obj[prop];
   }
 }

 return newObj;
}

function createArray(arr) {
 const newArr = [];
 for (let i = 0; i < arr.length; ++i) {
   if (typeof arr[i] === "object") {
     newArr[i] = Array.isArray(arr[i])
       ? createArray(arr[i])
       : createObject(arr[i]);
   } else {
     newArr[i] = arr[i];
   }
 }
 return newArr;
}

let f = {
 a: [0, 2],
 b: {
   c: "aa"
 },
 c: [
   {
     a: 5
   }
 ]
};

let c = createObject(f);

f.a[1] = 5;
f.c[0].a = 45;
console.log(f);
console.log(c);
источник

S

Syntax Highlight Bot in JS
Vladimir Luvolunov
function createObject(obj) {
 const newObj = {};
 for (let prop in obj) {
   if (typeof obj[prop] === "object") {
     newObj[prop] = Array.isArray(obj[prop])
       ? createArray(obj[prop])
       : createObject(obj[prop]);
   } else {
     newObj[prop] = obj[prop];
   }
 }

 return newObj;
}

function createArray(arr) {
 const newArr = [];
 for (let i = 0; i < arr.length; ++i) {
   if (typeof arr[i] === "object") {
     newArr[i] = Array.isArray(arr[i])
       ? createArray(arr[i])
       : createObject(arr[i]);
   } else {
     newArr[i] = arr[i];
   }
 }
 return newArr;
}

let f = {
 a: [0, 2],
 b: {
   c: "aa"
 },
 c: [
   {
     a: 5
   }
 ]
};

let c = createObject(f);

f.a[1] = 5;
f.c[0].a = 45;
console.log(f);
console.log(c);
источник

P

Piffarh in JS
Вячеслав
Соберели не через eval,
И Батичелли
источник

VL

Vladimir Luvolunov in JS
Доработал, доступна любая вложенность -  объект в объекте, массив в объекте, объект в массиве. массив в массиве и т.д.
источник

VL

Vladimir Luvolunov in JS
Да здравствует иммутабельность!!
источник

V

V L A S O V in JS
Vladimir Luvolunov
function createObject(obj){
  const newObj = {};
  for (let prop in obj){
     if(typeof obj[prop] === "object"){
       newObj[prop] = createObject(obj[prop])
     } else {
       newObj[prop] = obj[prop];
     }
  }
 
  return newObj;
}

let f = {
 a: {
    b: 6
 }
}

let c = createObject(f);

f.a.b = 20;

console.log(f);
console.log(c);
А object.assign чем плох?
источник

ВР

Ваня Реутенко... in JS
он делает поверхностное копирование
источник