2017-09-01 13 views
0

最大の配列数を10にしたい。レデューサー状態に新しいオブジェクトを追加すると、配列数が10を超えると、最初のオブジェクトを削除したい。これどうやってするの ?レデューサー状態の配列から最後の要素を削除する

これは私のコードです:

switch(action.type) { 
    case types.RECENTLY_VIEWED_ITEM: 
     return Object.assign({}, state, { 
     data: [ 
      ...(state.data.filter(item => (item.id !== action.payload.id))), 
      action.payload 
      ] 
     }); 

    case types.REMOVE_RECENTLY_VIEWED_ITEM: 
     return Object.assign({}, state, { 
     data: [ 
      ...(state.data.splice(0, 1)) 
     ]}); 

     default: 
     return state; 
} 

はあなたのスライスと

答えて

2

splice戻ります要素あなただけのスプレッド演算子を使用することができます

case types.REMOVE_RECENTLY_VIEWED_ITEM: 
    return Object.assign({}, state, { 
    data: [ 
     ...state.data.slice(1, 10) 
    ]}); 

    default: 
    return state; 

代わりのObject.assignを混合し、Spread operatorの削除後slice戻ります配列ながら、削除された要素の配列。

case types.REMOVE_RECENTLY_VIEWED_ITEM: 
    return { ...state, 
     data: [ 
      ...state.data.slice(1, 10) 
     ] 
    }; 

    default: 
    return state; 

は、(1)最大配列数10それだけで最初以外のすべてのデータをコピーしますを維持しないであろうとしても

Using Object.assign in React/Redux is a Good Practice?

+0

state.data.sliceこの回答を参照してください。したがって、配列の長さが15の場合、配列は最後の14個のデータで返されます。 – Ved

+0

@Ved OPはどこでもカウントをチェックしていないので、長さが10以上のときにアクションを呼び出すと思います。それは私が推測できるものです。 –

+0

質問:「最大配列数を10にしたい配列数が10を超えています。最初のオブジェクトを削除します。 " – Ved

0

変更スプライスに感謝し、あなたは次のように行うことができます:sliceなくspliceを利用する

case types.REMOVE_RECENTLY_VIEWED_ITEM: 
 
return Object.assign({}, state, { 
 
data: [ 
 
      ...(state.data.slice(state.data.length-10, (state.data.length)) 
 
    ]}); 
 
    default: 
 
    return state;

関連する問題