【问题标题】:Object assign with dynamic variable使用动态变量分配对象
【发布时间】:2016-11-16 07:35:32
【问题描述】:

我的 Redux 商店中有这个 initialState

const initialState = {
  isFetching : false,
  active     : {}
}

active 是一个对象。

现在我有一个应该activedata属性追加或添加属性的操作,如下所示:

[DASHBOARD_TEMPLATE_DATA_RECEIVE]: (state, action) => {
    return Object.assign({}, state, {
      isFetching   : false,
      active       : Object.assign({}, active, {data[action.key]: action.data})
    })
}

如您所见,data[action.key] 是不允许的。我该怎么做?

【问题讨论】:

    标签: javascript object merge lodash assign


    【解决方案1】:

    试试这个:

    active: Object.assign({}, active, {
      data: Object.assign({}, data, {
        [action.key]: action.data
      })
    })
    

    【讨论】:

      【解决方案2】:

      首先构建对象,使用方括号表示法将字符串用作属性名称:

      var data = {};
      data[action.key] = action.data;
      

      然后使用新创建的对象:

      [DASHBOARD_TEMPLATE_DATA_RECEIVE]: (state, action) => {
          return Object.assign({}, state, {
            isFetching   : false,
            active       : Object.assign({}, active, data)
          })
      }
      

      【讨论】:

      • 我觉得应该是:active : Object.assign({}, active, { data })
      • @JoeyHipolito,也许这是 Redux 特有的东西,我对此并不熟悉。但是在原版 javascript 中,data 已经是一个对象,所以不需要用{} 覆盖它。
      • 事实上,如果我们想事先添加多个节点,data[action.key] = action.data; 会很有帮助。谢谢@Jamiec
      【解决方案3】:

      我猜计算的属性名称可能会起作用。

      未经测试:

      active: Object.assign({}, active, {[data[action.key]]: action.data})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 2011-09-20
        • 2013-06-16
        • 2015-09-23
        • 1970-01-01
        相关资源
        最近更新 更多