更新javascript对象属性?
我的结构如下所示:更新javascript对象属性?,javascript,object,properties,Javascript,Object,Properties,我的结构如下所示: skillet.person = { name: { first: '', last: '' }, age: { current: '' }, birthday: { day: '', month: '', year: '' } } 我想知道如何更新这些值?i、 我认为以下是正确的 skillet.person.name.push({ first: 'blah', last: 'ha'}); 但这
skillet.person = {
name: {
first: '',
last: ''
},
age: {
current: ''
},
birthday: {
day: '',
month: '',
year: ''
}
}
我想知道如何更新这些值?i、 我认为以下是正确的
skillet.person.name.push({ first: 'blah', last: 'ha'});
但这是错的?我怎样才能解决这个问题
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
或
push
是一种Array
s方法,用于向数组中添加新项
如果要替换该值,则:
skillet.person.name = { … };
如果要在对象中存储多个(完整)名称,则需要该属性来保存对象数组而不是单个对象。如果要将一个对象混合到另一个对象中,可以使用jQuery的deep extend函数。“Deep”表示它不会用新对象覆盖
name
,而是覆盖这样一个对象内部的属性
$.extend(true, skillet.person, {
name: {
first: 'updated'
},
birthday: {
day: 'updated',
year: 'updated'
}
});
现在,
skillet.person
已更新了相应的属性,而其他属性未被更改。在最近使用ECMAScript 2015的浏览器上,您可以执行以下操作:
Object.assign(skillet.person.name, { first: 'blah', last: 'ha'});
这将保留未在右侧对象中列出的任何现有属性
参考:
[编辑]使用ES7,您可以做得更短(但是否更清晰?…):
参考资料:使用ES7+语法和功能方法:
const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
正如@ramon diogo用ES7写的那样+ 我喜欢更新嵌套值,如:
让用户={
姓名:{
第一个:'约翰',
最后:“史密斯”
},
年龄:18岁,
城市:“纽约”
}
常数年龄=20;
用户={…用户,年龄}
console.log(user.age)
//产出:20
常数新数据={
年龄:22,,
城市:“旧金山”
};
user={…user,…newData}
console.log(user.name.first)
//输出:约翰
console.log(user.age)
//产出:22
console.log(user.city)
//输出:“旧金山”
我认为这更简单
let skillet = {
person: {
name : {
first: '',
last : ''
},
age : {
current: ''
},
birthday: {
day : '',
month: '',
year : ''
}
}
};
let update = {
person: {
name: {
first: 'blah',
last : 'ha'
}
}
};
let result = Object.assign(skillet.person, update.person);
console.log(result);
最简单的方法
skillset.person.name = {};
这是为对象属性赋值的最简单方法。谢谢,如果我不想替换,有没有更快的更新方法,而不是列出每个值?@Andy:你可以迭代对象属性<代码>用于(新值中的var prop){oldValues[prop]=newValues[prop];}(在要点中)。MDN也有一个关于中…的
的好页面。看一看,谢谢你的回复。如果不是所有的值都可用,我不想替换属性,那么有没有更快的方法来更新而不是列出每个值呢?@Andy:你可能正在寻找一个扩展
函数@是的,目前我有一堆属性,但并非所有属性都包含值。我只是用部分属性替换对象,这导致了一个问题-这是否意味着我必须像MrE那样列出每个值,还是有一种不替换的更快方法?@Andy:你有两个属性要混合在一起的对象吗?@pimvdb-我只是喜欢一个有9个属性但通常只更新6个属性的对象是的。我尝试了{…}
但它将替换3个未填充的VAL-因此这意味着我必须编写6个属性,如skillet.person.name.first
等?MDN有一个很棒的JavaScript教程,特别是const new_obj={…obj,name:{first:'blah'}
?我错过了上次的属性!这样,您就删除了last
属性。如果您只想更新first
属性(而不删除last
属性),您应该执行const new_obj={…obj,name:{…obj.name,first:'blah'}}
。这是唯一可以应用于任何用例的通用答案。它看起来几乎像昆汀在2012年的答案。是否有任何改进或更改?如果我只需要更新“last”而不影响“first”呢?按照platie的相同示例,我认为只编辑一个元素的最简单方法是这样:。skillet.person.birth.year=2019控制台.log({…skillet.person,…skillet.person.birth.year});
$.extend(true, skillet.person, {
name: {
first: 'updated'
},
birthday: {
day: 'updated',
year: 'updated'
}
});
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
skillset.person.name = {};