我们可以在JavaScript中向不可变对象添加属性吗?

问题描述 投票:1回答:2

一个对象就像:

const obj = [{name: 'Alex', age: 20}, {name: 'James', age: 22}];

这个对象是Immutable.js不可变的。

是否可以为每个对象添加新密钥?例:

const obj = [{name: 'Alex', age: 20, city: 'New York'}, {name: 'James', age: 20, city: 'Rome'}];
javascript reactjs ecmascript-6 immutable.js ecmascript-2017
2个回答
4
投票

不是,如果它是不可变的。但没关系,您可以将所有属性复制到新结构中,并以这种方式添加所需内容:

const newData = obj.map(person => ({
  ...person,
  city: someLogicToDetermineCity(person)
}))

function someLogicToDetermineCity(person) {
  // logic based on person
  return city
}

0
投票

const不会创建不变性 - 它只是意味着在创建时分配给它的引用以后不能更改(这仅仅意味着您不能为其分配新值)。

看这些例子:

const a = {}

a = { name: "peter" } // => TypeError: invalid assignment to const `a'

但是在a上分配属性没问题:

const a = {}

a.name = "peter"

console.log(a); // => { "name": "peter" }

这同样适用于Array对象:

const arr = [{}]

arr.push(1);

arr[0].name="peter"

console.log(arr);
// [
//  {
//    "name": "peter"
//  },
//  1
// ]
© www.soinside.com 2019 - 2024. All rights reserved.