Как установить все ключи объекта в Javascript для newValue без изменения (Redux)? - PullRequest
0 голосов
/ 17 октября 2019

Вопрос в форме JavaScript

У меня есть такой объект:

const obj1 = {key1: value1, key2: value2, key3: value3, ...}

Чтобы изменить значение key1 (может быть любым ключом), это мой способ:

const obj2 = {...obj1, key1: newValue}

Я хочу установить все ключи на некоторые newValue, как это сделать без мутации?
Требуется вывод:

{key1: newValue, key2: newValue, key3: newValue, ...}

Вопрос в форме Redux

У меня есть state вот так:

{
  key1: value1,
  key2: value2,
  key3: value3,
  // ...
}

Чтобы изменить одно значение, я делаю вот так в моем reducer:

return {
  ...state,
  [action.key]: action.value
}

Но какизменить значение всех ключей, если я дам какое-либо значение через action.value? Я хочу, чтобы мое следующее состояние было таким:

{
  key1: newValue,
  key2: newValue,
  key3: newValue,
  // ...
}

1 Ответ

3 голосов
/ 17 октября 2019

Вам нужно перебрать ключи и создать новый объект, используя, скажем, reduce

const obj = {
  key1: 1,
  key2: 2,
  key3: 3
}

const value = 0;

const updated = Object.keys(obj).reduce((acc, key) => (acc[key] = value, acc), {})

console.log(obj, updated)

Просто для удовольствия немного прокси магии (не используйте для производства)

const obj = {
  key1: 1,
  key2: 2,
  key3: 3
}

const value = 0

const updated = { ...new Proxy(obj, {
    keys() {
      return Object.keys(obj)
    },
    get() {
      return value
    }
  })
}

console.log(obj, updated)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...