私は次のような構造を持っています:
skillet.person = {
name: {
first: '',
last: ''
},
age: {
current: ''
},
birthday: {
day: '',
month: '',
year: ''
}
}
私はこれらの値をどのように更新するのだろうと思っていましたか?つまり、私は次のとおりでしたが
skillet.person.name.Push({ first: 'blah', last: 'ha'});
しかし、それは間違っていますか?どうすれば修正できますか?
オブジェクトを別のオブジェクトにミックスしたい場合は、jQueryのディープエクステンド機能を使用できます。 「深い」とは、name
を新しいオブジェクトで上書きするのではなく、そのようなオブジェクト内のプロパティを上書きすることを意味します。
$.extend(true, skillet.person, {
name: {
first: 'updated'
},
birthday: {
day: 'updated',
year: 'updated'
}
});
今、skillet.person
には適切なプロパティが更新されていますが、他のプロパティは変更されていません。
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
または
skillet.person.name = {first : "blah", last : "ha"}
ES7 +構文と機能的アプローチの使用:
const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
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
Push
は、新しいアイテムを配列に追加するArray
sのメソッドです。
値を置き換える場合:
skillet.person.name = { … };
オブジェクトに複数の(完全な)名前を格納する場合、単一のオブジェクトではなくオブジェクトの配列を保持するプロパティが必要になります。
@ ramon-diogoがES7 +で書いたように
私は次のようなネストされた値を更新したい:
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'