Можем ли мы добавить свойства неизменяемого объекта в JavaScript? - PullRequest
0 голосов
/ 15 сентября 2018

Объект похож на:

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'}];

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

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
// ]
0 голосов
/ 15 сентября 2018

Нет, если он неизменен. Но это нормально, вы можете скопировать все свойства в новую структуру и добавить все, что вам нужно, таким образом:

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

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