我有这个功能。
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
}
...newdata
}
}
});
}
但是每次我想更新'settings'属性时,我都必须将其 all 传递给数据:
foo(settings {
last_email_notification_shown_date: new Date(),
email_notifications: null,
SomeNewProperty: 'whatever'
})
有没有一种方法可以更新此功能中的'settings'属性,而无需整体重写?我只想更新该属性,而不是覆盖它。
答案 0 :(得分:1)
是否有一种方法可以更新此功能中的'settings'属性,而无需整体重写?
很难从您的问题中得知您实际上在做什么,但是如果目标是将newdata
添加到现有设置中,那么您只是在错误的位置进行传播:
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
...newdata // <============================ moved
}
}
}
});
}
然后
foo({
SomeNewProperty: 'whatever'
});
如果您需要用一个对象来调用foo
,而该对象的对象在settings
之外并且也在settings
之内,那么会稍微复杂一些,但不会很多:
function foo(newdata) {
utils.method('GET', '/auth', {
response: {
data: {
...newdata, // <========================
settings: {
last_email_notification_shown_date: new Date(),
email_notifications: null,
...newdata.settings // <========================
},
}
}
});
}
然后
foo({
settings: {
SomeNewProperty: 'whatever'
},
otherStuff: "foo"
});
这会传播newdata
(包括settings
),然后在新对象中用替换newdata
覆盖settings
的{{1}},我们在其中替换传播settings
。