我们可以向 JavaScript 中的不可变对象添加属性吗?
Can we add properties to immutable object in JavaScript?
一个对象是这样的:
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'}];
如果它是不可变的,则不会。但没关系,您可以将所有属性复制到一个新结构中,并以这种方式添加您需要的任何内容:
const newData = obj.map(person => ({
...person,
city: someLogicToDetermineCity(person)
}))
function someLogicToDetermineCity(person) {
// logic based on person
return city
}
const
不会创建不变性 - 它只是意味着在创建时分配给它的 reference 以后不能更改(这只是意味着你不能分配一个它的新价值)。
查看这些示例:
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
// ]
一个对象是这样的:
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'}];
如果它是不可变的,则不会。但没关系,您可以将所有属性复制到一个新结构中,并以这种方式添加您需要的任何内容:
const newData = obj.map(person => ({
...person,
city: someLogicToDetermineCity(person)
}))
function someLogicToDetermineCity(person) {
// logic based on person
return city
}
const
不会创建不变性 - 它只是意味着在创建时分配给它的 reference 以后不能更改(这只是意味着你不能分配一个它的新价值)。
查看这些示例:
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
// ]