更新javascript对象属性?

And*_*ndy 22 javascript properties object

我有如下结构:

skillet.person = {
  name: {
    first: '',
    last: ''
  }, 
  age: {
    current: '' 
  },
  birthday: {
    day: '',
    month: '',
    year: ''
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何更新这些值?即我以下是正确的

skillet.person.name.push({ first: 'blah', last: 'ha'});
Run Code Online (Sandbox Code Playgroud)

但这是错的?我怎样才能解决这个问题 ?

Ram*_*ogo 23

使用ES7 +语法和功能方法:

const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }
Run Code Online (Sandbox Code Playgroud)

  • 这样,您就删除了“last”属性。如果您只想更新“first”属性(而不删除“last”属性),则应该执行“const new_obj = { ...obj, name: { ...obj.name, first: 'blah'}” }`。 (4认同)

YXD*_*YXD 19

skillet.person.name.first = "blah"
skillet.person.name.last = "ha"
Run Code Online (Sandbox Code Playgroud)

要么

skillet.person.name = {first : "blah", last : "ha"}
Run Code Online (Sandbox Code Playgroud)


pim*_*vdb 18

如果要将对象混合到另一个对象中,可以使用jQuery的深度扩展函数."深度"表示它不会覆盖name新对象,而是覆盖此对象内的属性.

$.extend(true, skillet.person, {
  name: {
    first: 'updated'
  },
  birthday: {
    day: 'updated',
    year: 'updated'
  }
});
Run Code Online (Sandbox Code Playgroud)

现在,skillet.person已更新相应的属性,而其他属性未受影响.


Emi*_*era 12

正如@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'
Run Code Online (Sandbox Code Playgroud)


Vin*_*t J 10

在使用ECMAScript 2015的最新浏览器上,您可以执行以下操作:

Object.assign(skillet.person.name, { first: 'blah', last: 'ha'});
Run Code Online (Sandbox Code Playgroud)

它将保留未在正确对象中列出的所有现有属性。

参考:https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign


Que*_*tin 5

push是的方法,Array用于将新项目添加到数组。

如果要替换该值,则:

skillet.person.name = { … };
Run Code Online (Sandbox Code Playgroud)

如果要在对象中存储多个(完整)名称,则需要该属性保存对象数组而不是单个对象。

  • @Andy:您可以遍历对象属性。for(varValue in newValues){oldValues [prop] = newValues [prop];}”(要点)。MDN也有一个关于`for ... in`的好页面。看看它。 (2认同)