更新JavaScript对象属性?
我有如下所示的结构:更新JavaScript对象属性?
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
已更新适当的属性,而其他属性未触及。
是的!非常感谢:)这就是我一直在寻找的 – Andy 2012-02-26 16:58:08
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
或
skillet.person.name = {first : "blah", last : "ha"}
感谢。有没有更快的方式来更新,而不是列出每个值,如果我不想更换属性,如果不是所有的值都可用? – Andy 2012-02-26 16:39:27
@Andy:你可能正在寻找一个'extend'函数。 [见Underscore.js的实现。](http://documentcloud.github.com/underscore/#extend) – pimvdb 2012-02-26 16:43:23
@pimvdb - 是的,此刻我有一堆属性,但不是全都包含值。我只用局部特性替换了这个对象,并且导致了一个概率 - 这是否意味着我必须列出像MrE所做的每个值,还是有更快的方法而不替换? – Andy 2012-02-26 16:45:10
push
是Array
秒的方法,增加了一个新的项的阵列。
如果要然后替换值:如果你想多(全)名称存储在对象
skillet.person.name = { … };
,那么你需要的属性来保存对象的数组,而不是单个对象。
谢谢有更快的方式更新,而不是列出每个值,如果我不想更换? – Andy 2012-02-26 16:37:49
@Andy:你可以遍历对象属性。 'for(var newValues){oldValues [prop] = newValues [prop];}'(在要点中)。 MDN也有一个关于'for ... in'的好页面。看看它。 – 2012-02-26 16:45:40
在最新的浏览器与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
MDN有很大的JavaScript教程,为应对特别是https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects – 2012-02-26 16:45:20