web-dev-qa-db-fra.com

Mise à jour de la propriété de l'objet javascript?

J'ai une structure comme la suivante:

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

Je me demandais comment je mettrais à jour ces valeurs? c'est-à-dire que je pensais que ce qui suit était correct

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

mais c'est faux ? Comment puis-je réparer cela ?

19
Andy

Si vous souhaitez mélanger un objet dans un autre, vous pouvez utiliser la fonction d'extension profonde de jQuery. "Profond" signifie qu'il n'écrase pas name avec le nouvel objet, mais écrase plutôt les propriétés à l'intérieur d'un tel objet.

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

Maintenant, skillet.person a les propriétés appropriées mises à jour, tandis que les autres propriétés sont intactes.

17
pimvdb
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"

ou

skillet.person.name = {first : "blah", last : "ha"}
19
YXD

Utilisation de la syntaxe ES7 + et d'une approche fonctionnelle:

const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
19
Ramon Diogo

Sur les navigateurs récents avec ECMAScript 2015, vous pouvez faire:

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

qui préservera tout attribut existant non répertorié dans le bon objet.

Référence: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

8
Vincent J

Push est une méthode de Arrays qui ajoute un nouvel élément à un tableau.

Si vous souhaitez remplacer la valeur, alors:

skillet.person.name = { … };

Si vous souhaitez stocker plusieurs noms (complets) dans l'objet, vous aurez besoin de la propriété pour contenir un tableau d'objets au lieu d'un seul objet.

4
Quentin

Comme @ ramon-diogo l'a écrit avec ES7 +

J'aime mettre à jour les valeurs imbriquées comme:

let user = {
    name: {
        first: 'john',
        last: 'smith'
    },
    age: 18,
    city: 'new york'
}

const age = 20;

user = {...user,...{age}}

console.log(user.age)
// output: 20


const newData ={
    age: 22,
    city: 'san francisco'
};

user = {...user,...newData}

console.log(user.age)
// output: 22
console.log(user.city)
// output: 'san francisco'
0
Emisael Carrera