如何在对象的属性上添加属性?

时间:2019-09-18 20:01:23

标签: javascript react-redux

我正在redux状态下使用规范化器,并且必须为UI指示器添加一个加载对象,

因此,如果我们假设这是我的规范化对象:

const myState  = {
   obj1: {
    a:1,
    b:2
   },
   obj2: {
    a:2,
    b:3
   }
}

这是我要在属性obj1和obj2上执行的操作:我想动态添加此对象:

loading:{ update_a: false }

我该怎么做?我没有什么可以操纵Axios响应上的数组;我正在减速机上做。

3 个答案:

答案 0 :(得分:2)

我们可以做这样的事情:

Object.keys(myState).reduce((acc, key) => {acc[key] = {...myState[key],loading:{ update_a: false } }; return acc;},{})

答案 1 :(得分:1)

我们将把现有状态拆开,并使用我们想要的添加属性来构建新版本:

Object.fromEntries(
  Object.entries(myState)
    .map(([key, obj]) => [
      key, 
      { 
        ...obj, // copy properties from the existing obj
        loading: { // and add the loading property
          update_a: false 
        }
      }
    ])
); 

希望在注释中比我的单行版本更容易阅读。

答案 2 :(得分:1)

您可以使用Object.entriesreduce

做类似的事情

const myState = {
  obj1: {
    a: 1,
    b: 2
  },
  obj2: {
    a: 2,
    b: 3
  }
}

const res = Object.entries(myState).reduce((all, [key, value]) => {
  all[key] = {
    ...value,
    loading: {
      updated_a: false
    }
  }
  return all;
}, {})

console.log(res)