Обновление свойства объекта javascript? - PullRequest
18 голосов
/ 26 февраля 2012

У меня есть такая структура:

skillet.person = {
  name: {
    first: '',
    last: ''
  }, 
  age: {
    current: '' 
  },
  birthday: {
    day: '',
    month: '',
    year: ''
  }
}

Мне было интересно, как я обновлю эти значения? я думаю, что следующее было правильным

skillet.person.name.push({ first: 'blah', last: 'ha'});

но это не так? Как я могу это исправить?

Ответы [ 5 ]

19 голосов
/ 26 февраля 2012
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"

или

skillet.person.name = {first : "blah", last : "ha"}
17 голосов
/ 26 февраля 2012

Если вы хотите смешать объект с другим, вы можете использовать функцию глубокого расширения jQuery. «Глубокий» означает, что он не перезаписывает name новым объектом, а перезаписывает свойства внутри такого объекта.

$.extend(true, skillet.person, {
  name: {
    first: 'updated'
  },
  birthday: {
    day: 'updated',
    year: 'updated'
  }
});

Теперь skillet.person имеет соответствующие обновленные свойства, тогда как остальные свойства не затронуты.

15 голосов
/ 16 марта 2018

Использование синтаксиса ES7 + и функциональный подход:

const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
6 голосов
/ 11 января 2018

В последних браузерах с ECMAScript 2015 вы можете сделать:

Object.assign(skillet.person.name, { first: 'blah', last: 'ha'});

, который сохранит любой существующий атрибут, не указанный в нужном объекте.

Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

4 голосов
/ 26 февраля 2012

push - это метод Array s, который добавляет новый элемент в массив.

Если вы хотите заменить значение, то:

skillet.person.name = { … };

Если вы хотитечтобы сохранить несколько (полных) имен в объекте, вам понадобится свойство для хранения массива объектов вместо одного объекта.

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