我有如下结构:
skillet.person = {
name: {
first: '',
last: ''
},
age: {
current: ''
},
birthday: {
day: '',
month: '',
year: ''
}
}
我想知道如何更新这些值?即我以下是正确的
skillet.person.name.push({ first: 'blah', last: 'ha'});
但这是错的?我该如何解决这个问题?
答案 0 :(得分:18)
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
或
skillet.person.name = {first : "blah", last : "ha"}
答案 1 :(得分:16)
如果要将对象混合到另一个对象中,可以使用jQuery的深度扩展函数。 “深度”表示它不会用新对象覆盖name
,而是覆盖此对象内的属性。
$.extend(true, skillet.person, {
name: {
first: 'updated'
},
birthday: {
day: 'updated',
year: 'updated'
}
});
现在,skillet.person
已更新相应的属性,而其他属性未受影响。
答案 2 :(得分:11)
使用ES7 +语法和功能方法:
novalidate
答案 3 :(得分:5)
在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
答案 4 :(得分:4)
push
是Array
的一种方法,可以为数组添加新项目。
如果要替换值,则:
skillet.person.name = { … };
如果要在对象中存储多个(完整)名称,则需要该属性来保存对象数组而不是单个对象。
答案 5 :(得分:3)
@ 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.age)
// output: 22
console.log(user.city)
// output: 'san francisco'
答案 6 :(得分:0)
我认为这很简单
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);
答案 7 :(得分:0)
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
最简单的方法。
答案 8 :(得分:0)
skillset.person.name = {};
这是为对象的属性赋值的最简单方法。