Удалить свойство в указанном объекте JS - PullRequest
0 голосов
/ 10 сентября 2018

Допустим, я хочу удалить свойство в объекте JS

const source = {
  nestA: {
    nestB: {
      nestC: 'deleteMe'
    }
  }
}
const clone = {}
clone.nestA = {...source}.nestA
delete clone.nestA.nestB
console.log(source)

выполнить вышеуказанный скрипт
ожидайте: source останется нетронутым
актуально: source станет {}

Однако, если я просто сделаю delete clone.nestA, source останется нетронутым, как ожидалось

Вопрос: Как delete clone.nestA.nestB влияет source. Но delete clone.nestA нет?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Почему delete clone.nestA.nestB влияет на source, а delete clone.nestA нет?

source и clone являются различными объектами. На третий объект ссылаются как из свойства source.nestA, так и из свойства clone.nestA. (Другой объект находится в свойстве nestB).

Когда вы удаляете свойство в source, например, свойство source.nestA, вы воздействуете только на объект source.

Когда вы удаляете свойство в третьем объекте, например source.nestA.nestB или clone.nestA.nestB (то же самое свойство в том же объекте), вы воздействуете только на этот третий объект. Просто source и clone теперь ссылаются на тот объект, у которого отсутствует свойство.

0 голосов
/ 10 сентября 2018

Вы можете использовать метод присвоения объектов для создания глубокой копии таким образом, что ваш источник может быть недоступен.

let deepCopy = Object.assign({},source);
// do anything with deepCopy.

Обновление - он не будет создавать глубокую копию вложенного объекта.Вы можете использовать метод ниже для создания глубокой копии для вложенного объекта.

let deepCopy = JSON.parse (JSON.stringify (source));

Или

function cloneObject(obj) {
var clone = {};
for(var i in obj) {
    if(obj[i] != null &&  typeof(obj[i])=="object")
        clone[i] = cloneObject(obj[i]);
    else
        clone[i] = obj[i];
}
return clone;
}

Проверьте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...