And*_*ndy 22 javascript properties object
我有如下结构:
skillet.person = {
name: {
first: '',
last: ''
},
age: {
current: ''
},
birthday: {
day: '',
month: '',
year: ''
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何更新这些值?即我以下是正确的
skillet.person.name.push({ first: 'blah', last: 'ha'});
Run Code Online (Sandbox Code Playgroud)
但这是错的?我怎样才能解决这个问题 ?
Ram*_*ogo 23
使用ES7 +语法和功能方法:
const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
Run Code Online (Sandbox Code Playgroud)
YXD*_*YXD 19
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
Run Code Online (Sandbox Code Playgroud)
要么
skillet.person.name = {first : "blah", last : "ha"}
Run Code Online (Sandbox Code Playgroud)
pim*_*vdb 18
如果要将对象混合到另一个对象中,可以使用jQuery的深度扩展函数."深度"表示它不会覆盖name新对象,而是覆盖此对象内的属性.
$.extend(true, skillet.person, {
name: {
first: 'updated'
},
birthday: {
day: 'updated',
year: 'updated'
}
});
Run Code Online (Sandbox Code Playgroud)
现在,skillet.person已更新相应的属性,而其他属性未受影响.
Emi*_*era 12
正如@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.name.first)
// output: john
console.log(user.age)
// output: 22
console.log(user.city)
// output: 'san francisco'
Run Code Online (Sandbox Code Playgroud)
Vin*_*t J 10
在使用ECMAScript 2015的最新浏览器上,您可以执行以下操作:
Object.assign(skillet.person.name, { first: 'blah', last: 'ha'});
Run Code Online (Sandbox Code Playgroud)
它将保留未在正确对象中列出的所有现有属性。
参考:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
push是的方法,Array用于将新项目添加到数组。
如果要替换该值,则:
skillet.person.name = { … };
Run Code Online (Sandbox Code Playgroud)
如果要在对象中存储多个(完整)名称,则需要该属性保存对象数组而不是单个对象。