更新 javascript 对象属性?

问题描述 投票:0回答:10

我的结构如下:

skillet.person = {
  name: {
    first: '',
    last: ''
  }, 
  age: {
    current: '' 
  },
  birthday: {
    day: '',
    month: '',
    year: ''
  }
}

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

skillet.person.name.push({ first: 'blah', last: 'ha'});

但这是错误的?我该如何解决这个问题?

javascript object properties
10个回答
121
投票

使用 ES7+ 语法和函数式方法:

const new_obj = { ...obj, name: { first: 'blah', last: 'ha'} }

39
投票

在最新的带有 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


35
投票

正如@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'

29
投票
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"

skillet.person.name = {first : "blah", last : "ha"}

25
投票

如果你想将一个对象混合到另一个对象中,你可以使用jQuery的深度扩展功能。 “深”意味着它不会用新对象覆盖

name
,而是覆盖该对象内部的属性。

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

现在,

skillet.person
已更新相应的属性,而其他属性保持不变。


5
投票

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

如果您想替换该值,则:

skillet.person.name = { … };

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


4
投票

我觉得这样更简单

     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);

1
投票
skillet.person.name.first = "blah"
skillet.person.name.last = "ha"

最简单的方法。


0
投票

更新 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);

-1
投票
skillset.person.name = {};

这是为对象的属性赋值的最简单方法。

© www.soinside.com 2019 - 2024. All rights reserved.