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 ?
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.
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
ou
skillet.person.name = {first : "blah", last : "ha"}
Utilisation de la syntaxe ES7 + et d'une approche fonctionnelle:
const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
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
Push
est une méthode de Array
s 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.
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'