如何使用ES6修改嵌套对象的特定元素?

时间:2017-02-26 05:12:45

标签: javascript object react-native ecmascript-6 redux

我有这个initialStore:

const initialState =
{
  0:{
    screen_name: '1',
    props: null,
  },
  1:{
    screen_name: '2',
    props: null,
  },
  2:{
    screen_name: '3',
    props: null,
  },
  3:{
    screen_name: '4',
    props: null,
  },
  4:{
    screen_name: '5',
    props: null,
  },
}

我想知道如何修改值state.0.screen_name: 1,同时使用ES6保留原始状态的其余部分?

这是我到目前为止采用的方法:

export const navigationReducer = createReducer(initialState, {
  [types.CHANGE_SCREEN_EXPERIMENTAL](state,action){
    return{...state[action.id], screen_name:action.screen_name, ...state
  };
}

}, );

但是,这会返回:

result of the code above

action.id0,它应该修改state[0]元素,但是,它复制了它们的元素,修改它们并将它们放在状态对象本身而不是{{1对象。

期望的结果:

state[0]

希望navigationReducer:{ 0: { props: null, screen_name: "ad" } 1:Object 2:Object 3:Object 4:Object } screen_name超出这些对象(0,1,2,3,4)。

任何想法都很受欢迎。

1 个答案:

答案 0 :(得分:1)

我找到了使用ES6的方法

以下是:

export const navigationReducer = createReducer(initialState, {
    [types.CHANGE_SCREEN_EXPERIMENTAL](state,action){
      return{
        ...state,[action.id]:{
          ...state[action.id],
          screen_name:action.screen_name,
          props:action.props,
        }
      };
    }
  },
);

这导致:

result of code above

非常感谢你的帮助和时间@ibrahimmahrir。