我的结构如下:
skillet.person = {
name: {
first: '',
last: ''
},
age: {
current: ''
},
birthday: {
day: '',
month: '',
year: ''
}
}
我想知道如何更新这些值?即我认为以下是正确的
skillet.person.name.push({ 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
[编辑]使用ES7,你可以做得更短(但更清晰吗?...):
{...skillet.person.name, ...{ first: 'blah', last: 'ha'}};
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
正如@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'
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
或
skillet.person.name = {first : "blah", last : "ha"}
如果你想将一个对象混合到另一个对象中,你可以使用jQuery的深度扩展功能。 “深”意味着它不会用新对象覆盖
name
,而是覆盖该对象内部的属性。
$.extend(true, skillet.person, {
name: {
first: 'updated'
},
birthday: {
day: 'updated',
year: 'updated'
}
});
现在,
skillet.person
已更新相应的属性,而其他属性保持不变。
push
是 Array
的一种方法,用于将新项目添加到数组中。
如果您想替换该值,则:
skillet.person.name = { … };
如果您想在对象中存储多个(完整)名称,那么您需要该属性来保存对象数组而不是单个对象。
我觉得这样更简单
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);
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
最简单的方法。
更新 javascipt 对象属性的简单方法
const skillet = [
person = {
name: {
first: 'Arbaz',
last: 'khan'
},
age: {
current: 'ten'
},
birthday: {
day: '',
month: '',
year: ''
}
}
]
假设我们要更新名字。这就是我们在 ES7+ 中执行此操作的方式
skilled.map(person => {...person,person.name.first:"Arbaz2"})
上面的代码将更新所有对象。 另一方面,如果您只想更新特定对象。我们也可以这样做,我们只需要一个条件。但在这种情况下,您还需要唯一的字段,我们将其称为 personId。
skillled.map(person => person.personId === personId ? {...person,person.name.first:"Arbaz2"} : person);
skillset.person.name = {};
这是为对象的属性赋值的最简单方法。